1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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)で実現した人もいる。
本当に自由度のあるキューがほしいなら自作しかないのだろう。
とても残念だ。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?