在Go編程語言中,您可以使用稱為“通道”的結構來發(fā)送消息。 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。我需要的頻道很快寫入不阻塞,(消息發(fā)送)讀取執(zhí)行阻止,(消息接收)分叉之前不需要特殊處理,輕巧和簡單會很好。到目前為止,我玩過DRb,(與輕量級+緩慢+我的小腦袋有太多魔力相對)套接字,(UNIXSocket,TCPSocket ...套接字似乎有許多使用它們的方式。我在UNIXSockets上獲得了半工作的通道。如果您認為套接字有意義,那么我應該看一下哪些功能子集?)管道。(連接兩個以上的進程似乎并非易事)如果其中任何一項已經(jīng)是解決我的問題的理想技術,請?zhí)峁┙坛痰?,其中包含有關我的要求的更多重點信息。
2 回答

精慕HU
TA貢獻1845條經(jīng)驗 獲得超8個贊
Go的消息傳遞是一種一流的構造,它僅通過并發(fā)(goroutines,tasklet,無論您要稱呼什么),才是一流的構造。使用廉價的并發(fā),阻止tasklet或協(xié)程不再是問題,并且阻止消息傳遞變得更加有意義。
如果這是Python,我會把您指向Stackless;在Ruby中,也許Revactor或NeverBlock適合您?
- 2 回答
- 0 關注
- 271 瀏覽
添加回答
舉報
0/150
提交
取消