如何通过内存从 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]
出于特定原因,我必须坚持使用 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]