【发布时间】:2015-12-06 15:42:10
【问题描述】:
我有以下代码 sn-p(我正在尝试做的事情的简化表示 - 训练轮)。 sleep(2) 将代表我真实代码中的一些网络操作:
arr = []
5.times do |i|
rd, wr = IO.pipe
fork do
sleep(2) # I'm still waiting for the sleep to happen on each process ... not good, there is no parallelism here
rd.close
arr[i] = i
Marshal.dump(arr, wr)
end
wr.close
result = rd.read
arr = Marshal.load(result)
end
# Process.waitall
p arr
问:是否有可能以某种方式在循环中创建新进程,将结果传回但不等待每次迭代。我很生疏,对 IPC 不太了解/记得很多……尤其是在 Ruby 中。
- 实际结果是等待时间2s*5 = 10s
- 预计总共约 2 秒(sleep() 的异步处理)
所以,一个很好的评论可以澄清事情,解释理论会有很大帮助。谢谢。
【问题讨论】: