由于特定原因,我必须坚持使用MRI Ruby。我需要真正的并行性而不是绿色线程,因此我使用了效果很好的fork。但是我找不到一种方法可以通过内存将信息从派生进程内部传递回主进程,而不必将数据写入外部文件。
如何在以下代码中有效地更改数据?我想从fork内部将数据添加到全局数组:
$data = []
4.times {
Process.fork {
$data << rand
}
}
Process.waitall
p $data
如果没有办法将数据传递回去,那么是否有任何我可以从Ruby开始而无需在底层操作系统中安装任何东西的内存缓存解决方案?宝石也会为我工作。谢谢。
好吧,我已经设法使用并行gem解决了另一种问题:
https://github.com/grosser/parallel
gem并行安装
require "parallel"
# passing data to 3 processes
data = [ 1, 2, 3 ]
result = Parallel.map( data ){|d|
# some expensive computation ...
d ** 3
}
p result
[1、8、27]