実行時間が変動するタスクを処理して、多くの人がおそらく行う必要があることを実行しています。次の概念実証コードがあります。
threads = []
(1...10000).each do |n|
threads << Thread.new do
run_for = rand(10)
puts "Starting thread #{n}(#{run_for})"
time=Time.new
while 1 do
if Time.new - time >= run_for then
break
else
sleep 1
end
end
puts "Ending thread #{n}(#{run_for})"
end
finished_threads = []
while threads.size >= 10 do
threads.each do |t|
finished_threads << t unless t.alive?
end
finished_threads.each do |t|
threads.delete(t)
end
end
end
以前のスレッドの1つがドロップオフするまで、新しいスレッドは開始されません。誰かがこれを行うためのより良い、よりエレガントな方法を知っていますか?