如何通过内存从 fork 传回数据而不必在 Ruby 中写入文件?

How to pass back data from forks through memory instead of having to write files in Ruby?

出于特定原因,我必须坚持使用 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]