POSIX MQは今いちイケてない
TL;DR
標準仕様が使いづらいパラメータってのはどうなんよ?
動的にパラメータを変更させてくれよ。
POSIX MQは便利で不便
POSIX MQは使ってみればわかるが便利だ。
- 高速(UDS/NamedPipe比)
- Read/Writeどちらが先にOpenしてもよい
- 両端を閉じても再びOpenすればデータが残っている(これは欠点でもある)
- リブートすればキューが消えるので後始末不要(これは欠点略
そんな使いやすいPOSIXメッセージキューだが大きな欠点がある。
パラメータのチューニングがシステムパラメータでしかできない。
設定は /proc/sys/fs/mqueue/ 配下に置かれている。
はい、ファイルです。編集には特権が必要です。まずこの時点でクソ。
キューのパラメータは標準では
- メッセージ数10
- メッセージサイズ8192 bytes
となっている。このパラメータ選定がさらにクソである。
メッセージサイズ8KBで保持数10とかまったく融通が利かない。
UDS/Pipeと比較して
IPCの仕様を検討する場合、UDSやPIPEのようにストリームならNo Settingだ。
ただしメッセージ区切りがないのでWrite側がオーバーランすると面倒である。
その点、MQは固定サイズメッセージの配列と考えることができる。
Write側が多少オーバーランしても、Read側のまとめ読みで帳尻合わせできる。
固定サイズメッセージだから区切りもわかるしデータの振り分けもできる。
だが上記の基本パラメータは使いにくい。
パラメータ変更のAPI
あることはある。とってもとっても使えないAPIだがある。
その名もmq_setattr()である。
だがこのAPI、メッセージ数もメッセージサイズも変更できない。
変更可能なのはキューのブロッキング属性のみである。
いやいやそんなもんブロッキングで使うに決まってるでしょ。
yield()しながらノンブロッキングで高速回転なんて無駄すぎる。
まあそれにしてもメッセージ数とメッセージサイズは変更したかった。
4KB x 20msg とか
256byte x 320msgとか
柔軟な使い方がしたかったのだができない。できないものはできない。
ということで
IEEE様がPOSIX MQの仕様を拡張してくれることを願うのみである。
有志では、メッセージキューの仕組みをso(DLL)で実現した人もいる。
本当に自由度のあるキューがほしいなら自作しかないのだろう。
とても残念だ。
Author And Source
この問題について(POSIX MQは今いちイケてない), 我々は、より多くの情報をここで見つけました https://qiita.com/pff01632/items/8c2f3e94e98d7a61954c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .