Go プログラミング言語では、「チャネル」と呼ばれる構造を使用してメッセージを送信できます。 http://golang.org/doc/effective_go.html#channels
私はRubyで、特にIPCのために、そのようなものを使いたいと思っています。
私が欲しいものの疑似コード:
channel = Channel.new
fork do
3.times{ channel.send("foo ") }
exit!
end
Thread.new do
3.times{ channel.send("bar ") }
end
loop do
print channel.recv
end
# ~> bar foo foo bar bar foo
そのように動作するRubyのコンストラクト、ライブラリ、または同等のものはありますか?
そうでない場合: そのような抽象化を構築する最善の方法は何ですか?
更新:これらのチャネルから必要なものを明確にするため。
ユース ケースの 1 つ: フォークされた一部のワーカーがジョブを待っています。それらはすべて同じ JobChannel から読み取り、結果を同じ ResultChannel に報告します。
必要なチャンネル
- 非常に高速で、
- 書き込みはブロックされません(メッセージ送信)
- reads do block (メッセージ受信)
- フォークする前に特別な処理は必要ありません。
- 軽くてシンプルなところがいいです。
これまでのところ、私は遊んでいました
- DRb、(私の小さな脳には軽量+遅い+魔法が多すぎるの反対)
- ソケット(UNIXSocket、TCPSocket ... ソケットにはさまざまな使用方法があるようです。UNIXSockets で半分しか機能しないチャネルを取得しました。ソケットが理にかなっているとお考えの場合は、機能のどのサブセットを見ればよいでしょうか?)
- パイプ。(2つ以上のプロセスを接続することは自明ではないようです)
それらのいずれかがすでに私の問題に最適なテクノロジである場合は、私の要件に焦点を当てた情報を含むチュートリアルなどを提供してください。