在Go编程语言中,可以使用称为“通道(Channels)”的构造来发送消息。
http://golang.org/doc/effective_go.html#channels
我希望在Ruby中也能使用类似的东西,特别是用于IPC。
我想要的伪代码:
有没有类似的Ruby构造函数、库或等效物可以实现这样的功能?
如果没有,那么构建这样一个抽象的最佳方式是什么?
更新:澄清我从这些通道中需要什么。
一个用例:一些分叉工作程序正在等待任务。它们都从同一个JobChannel中读取并将结果报告给同一个ResultChannel。
我需要的通道:
-非常快; -写入不会阻塞(消息发送); -读取会阻塞(消息接收); -在分叉之前不需要特殊处理; -轻量级和简单的更好。
到目前为止,我尝试了以下方法:
-DRb(与轻量级相反+速度慢+对于我的小脑袋来说过于神奇); -Sockets(UNIXSocket,TCPSocket... Sockets似乎有很多使用方法。我在UNIXSockets上得到了一个半工作的通道。如果您认为套接字有意义,那么应该查看哪些功能子集?); -Pipes(连接超过2个进程似乎并不容易)。
如果其中任何一个已经是解决我的问题的完美技术,请提供教程等,其中包含更专注于我的要求的信息。
我想要的伪代码:
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(与轻量级相反+速度慢+对于我的小脑袋来说过于神奇); -Sockets(UNIXSocket,TCPSocket... Sockets似乎有很多使用方法。我在UNIXSockets上得到了一个半工作的通道。如果您认为套接字有意义,那么应该查看哪些功能子集?); -Pipes(连接超过2个进程似乎并不容易)。
如果其中任何一个已经是解决我的问题的完美技术,请提供教程等,其中包含更专注于我的要求的信息。