From: "Iñaki Baz Castillo" Date: 2008-04-16T19:17:10+09:00 Subject: Re: Parallel for loop 2008/4/16, Fredrik : > Actually, I'll change it a bit. I added Process.waitall since there > are otherwise some dead(?) processes left. > > > module Enumerable > def fmap &b > result = map do |*a| > > r, w = IO.pipe > fork do > r.close > w.write( Marshal.dump( b.call(*a) ) ) > end > [ w.close, r ].last > end > > Process.waitall > result.map{|r| Marshal.load [ r.read, r.close ].first} > end > end It's great: irb> Benchmark.realtime { [1,2,3,4,5,6,7,8,9].map { |i| sleep 1; i +1 } } => 8.99636912345886 irb> Benchmark.realtime { [1,2,3,4,5,6,7,8,9].forkmap { |i| sleep 1; i +1 } } => 1.02371001243591 XD -- Iñaki Baz Castillo