Effective μITRON 第65539項 メッセージの優先度が必要なければmbxでなくdtqを使おう
μITRONの通信APIには、見るからにそっくりなAPIのセットがある。データキュー(dtq)とメールボックス(mbx)だ。
どちらも、cre_xxx、del_xxx、[t]snd_xxx、[tp]rcv_xxxがあり、できることは、大変同じように見える。
さて、これらの違いはご存知だろうか?
http://www.sakamura-lab.org/TRON/ITRON/ITRON-CLUB/ARCHIVE/msg00098.html
ぐぐったらすぐに出てきたが。
つまり、こういうことだ。メールボックスは、(おそらく)内部では、リンクトリストのようなものとして、管理される。それに対して、データキューは、本当にキュー、つまりただの配列データ(+先頭ポインタ、終端ポインタ+同期オブジェクト)として管理される、というわけだ。
それぞれ、メールボックスと、データキューの利点は以下のようになる
mbx:
- 優先度を付けられる(後から送ったメッセージを先に取り出すことができる)
- 最大数を決めなくてよい
dtq:
- (多分)mbxに比べると軽い
- ただのデータを送れる(mbxはパケットを作ってやらないといけない)
さて、こうやって見ると、mbxの利点は、大抵の状況でどうでもよい、ということがわかるだろう。優先度付きメッセージなんて、そうとう注意深く設計しないと、どこで同期問題に出会うかわからなくなりそうだし、最大数っつったって、そんな、ねえ、mitron使うような環境で、ヒープ確保なんて怖くて使えないし…
それに比べると、dtqの良いところは大体の状況で役立つといえるだろう。なによりも、ワード単位整数なら、気軽にそのまま送れるというのが大きい。(そういえば、会社の人はメッセージパケットなんとかするラッパ書いてたナァ…昔のバージョンには無かったとかかもしれんが)
と、いうわけで、よほどのことが無い限り、メールボックスより、データキューを使うようにするとよいかと思われます、という話。