gpt4 book ai didi

ruby - 在 Ruby 中转到 channel

转载 作者:IT王子 更新时间:2023-10-29 01:21:41 25 4
gpt4 key购买 nike

在 Go 编程语言中,您可以使用称为“ channel ”的结构来发送消息。 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 的结构、库或等价物?

如果不是:构建这种抽象的最佳方法是什么?

更新:阐明我需要从这些 channel 获得什么。

一个用例:一些 fork 的 worker 正在等待工作。它们都从同一个 JobChannel 中读取,并将结果报告给同一个 ResultChannel。

我需要的 channel

  • 非常快,
  • 写入不阻塞,(消息发送)
  • 读取 block ,(消息接收)
  • fork 前不需要特殊处理,
  • 轻巧简单就好了。

到目前为止我玩过

  • DRb,(轻量级 + 缓慢 + 对我的小脑袋来说太神奇了)
  • Sockets, (UNIXSocket, TCPSocket ... Sockets 似乎有很多使用方法。我在 UNIXSockets 上有一个半工作 channel 。如果你认为 sockets 有意义,我应该看看哪些功能子集在?)
  • 管道。 (连接超过 2 个进程似乎很重要)

如果其中任何一项已经是解决我的问题的完美技术,请提供教程等,其中包含更符合我的要求的信息。

最佳答案

Go 通过 channel 传递消息的想法,作为一流的构造,实际上只在存在并发性(goroutines、tasklets,无论你怎么调用它们)的情况下才有意义。有了廉价的并发,阻塞 tasklet 或协程不再是问题,阻塞消息传递开始变得更有意义。

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

关于ruby - 在 Ruby 中转到 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3062183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com