为了账号安全,请及时绑定邮箱和手机立即绑定

在Ruby中使用频道

在Ruby中使用频道

Go
翻阅古今 2021-04-01 01:13:59
在Go编程语言中,您可以使用称为“通道”的结构来发送消息。 http://golang.org/doc/effective_go.html#channels我很想在Ruby中使用类似的东西,尤其是对于IPC。我想要的伪代码:channel = Channel.newfork do  3.times{ channel.send("foo ") }  exit!endThread.new do  3.times{ channel.send("bar ") }endloop do  print channel.recvend# ~> bar foo foo bar bar foo是否有任何可以像Ruby这样工作的构造,库或等效项?如果不是:构建这种抽象的最佳方法是什么?更新:为了阐明我从这些渠道中需要什么。一个用例:一些分叉的工人正在等待工作。它们都从相同的JobChannel读取,并将结果报告给相同的ResultChannel。我需要的频道很快写入不阻塞,(消息发送)读取执行阻止,(消息接收)分叉之前不需要特殊处理,轻巧和简单会很好。到目前为止,我玩过DRb,(与轻量级+缓慢+我的小脑袋有太多魔力相对)套接字,(UNIXSocket,TCPSocket ...套接字似乎有许多使用它们的方式。我在UNIXSockets上获得了半工作的通道。如果您认为套接字有意义,那么我应该看一下哪些功能子集?)管道。(连接两个以上的进程似乎并非易事)如果其中任何一项已经是解决我的问题的理想技术,请提供教程等,其中包含有关我的要求的更多重点信息。
查看完整描述

2 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

Go的消息传递是一种一流的构造,它仅通过并发(goroutines,tasklet,无论您要称呼什么),才是一流的构造。使用廉价的并发,阻止tasklet或协程不再是问题,并且阻止消息传递变得更加有意义。

如果这是Python,我会把您指向Stackless;在Ruby中,也许RevactorNeverBlock适合您?


查看完整回答
反对 回复 2021-04-26
  • 2 回答
  • 0 关注
  • 247 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信