AP4R というか、reliable-msg で実現したいチャネルとスレッドの関係
咳(id:m_seki)さん(この書き方で良いのでしょうか?)に、RubyKaigi の懇親会で質問をさせていただいたのですが、
10分で書く複数のチャネルのあるQueue
id:ita-wasaさんにRubyKaigi2007の宴会で質問された気がするのだけど、メモしなかったのでちゃんと思い出せない。AP4Rでなにが欲しいかわからないので勘で書く。チャネルはパターンでなく、直接指定することにするので、状態変数はチャネルの数だけ作ることにする。
http://d.hatena.ne.jp/m_seki/20070717
という回答を頂きました! +コードつき。フラットなチャネル構造であれば、かなり短いコードで書けるもんですね。かっこいい。質問の内容について、懇親会の時にはうまく説明できませんでした、すみません。自分の中でも完全に問題設定が整理されていないので、ここで言葉に落としてみます。ただし断片の組み合わせになっている可能性あり。
もう1つ前置き。AP4R は、永続化およびチャネルの制御は reliable-msg を使っているので、この話は reliable-msg の層になります。以上、reliable-msg への敬意表明でした。
以下、チャネルとサブスライバ(consumer)が主要な登場人物です。ホントは producer も居るけどここでは副次的。
チャネルの定義
サブスクライバ
で、やっぱり気になるのが、サブスクライバの待ち方。
チャネルをパターンで待てるようにすると、Rinda と同じことになってしまって、速度を稼ぎにくくなる
http://d.hatena.ne.jp/m_seki/20070717
なのですが、Rinda よりは柔軟性が無くなるのは受け入れて、でもチャネル一本(ex. aa.bb.c1)よりは柔軟な待ち方ができるようにしたい、と考えています。柔軟さの想定は以下のような感じ。
数値(サイズ)
これだけでは、ケースバイケースという結論にしかならないと思うので、ベースにする数字は以下を考えています。
- チャネルのトークン数は、3 から(多くても) 5 くらい
- チャネルの数(種類)は、10*10*10 くらい
- ex.) a0.b0.c0, a0.b0.c1, ..., a0.b0.c9, a0.b1.c0, ..., a1.b0.c0, ......, a9,b9,c9
- もうちょっと大きいところで考える方が面白いかもしれない
- セミコロン区切りで複数チャネルを指定する場合、多くても 5 種類くらい
以上、曖昧なところも多くありますが、質問したかった問題設定はこのようなことでした。紙も持たずにこんな質問してすみませんでした... チャネルのところ、等幅フォントじゃないと見難いな...