在 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 构造、库或等价物?
如果不是:构建这种抽象的最佳方式是什么?
更新:澄清我需要从这些渠道获得什么。
一个用例:一些分叉的工人在等待工作。它们都从同一个 JobChannel 读取,并将结果报告到同一个 ResultChannel。
我需要的频道
- 非常快,
- 写入不阻塞,(消息发送)
- 读取做块,(消息接收)
- 分叉前不需要特殊处理,
- 轻量级和简单会很好。
到目前为止,我玩过
- DRb,(对我的小脑袋来说,轻量级 + 慢 + 太多魔法相反)
- 套接字,(UNIXSocket、TCPSocket ...套接字似乎有很多使用它们的方法。我在 UNIXSockets 上获得了一个半工作通道。如果您认为套接字有意义,我应该查看哪些功能子集?)
- 管道。(连接超过 2 个进程似乎并不简单)
如果其中任何一个已经是解决我的问题的完美技术,请提供教程等,其中包含更多关于我的要求的集中信息。