在Ruby中使用频道

在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上获得了半工作的通道。如果您认为套接字有意义,那么我应该看一下哪些功能子集?)

  • 管道。(连接两个以上的进程似乎并非易事)

如果其中任何一项已经是解决我的问题的理想技术,请提供教程等,其中包含有关我的要求的更多重点信息。


翻阅古今
浏览 248回答 2
2回答

精慕HU

Go的消息传递是一种一流的构造,它仅通过并发(goroutines,tasklet,无论您要称呼什么),才是一流的构造。使用廉价的并发,阻止tasklet或协程不再是问题,并且阻止消息传递变得更加有意义。如果这是Python,我会把您指向Stackless;在Ruby中,也许Revactor或NeverBlock适合您?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go