我有这段代码:
require 'pp'
$pool = []
def work arg
$pool.push($$)
sleep (1 + rand(5))
$pool.delete($$)
exit
end
ary = []
100.times { |x| ary.push(x) }
while ary.any? do
while $pool.size < 10 && ary.any?
arg = ary.pop
Process.detach( fork { work(arg) } )
pp $pool.size
sleep 0.01
end
end
对我来说,当我在$pool
work()
中填充pp $pool.size
时,while
循环0
总是{{1}}
我哪里错了?
答案 0 :(得分:3)
使用fork创建新进程时,新进程将获取(空)$池的副本。执行循环的父进程中的$ pool永远不会填充任何内容(在子进程中执行对工作函数的调用),因此它的大小始终为0.