У меня есть вычисление, которое можно разделить на независимые единицы, и теперь я имею дело с ним, создавая фиксированное количество потоков, а затем отдавая куски работы, которые должны выполняться в каждом потоке. Итак, в псевдокоде здесь выглядит как
# main thread
work_units.take(10).each {|work_unit| spawn_thread_for work_unit}
def spawn_thread_for(work)
Thread.new do
do_some work
more_work = work_units.pop
spawn_thread_for more_work unless more_work.nil?
end
end
В принципе, когда создается начальное число потоков, каждый из них выполняет некоторую работу, а затем продолжает делать вещи из рабочего стека, пока ничего не останется. Все работает нормально, когда я запускаю вещи в irb, но когда я выполняю script с помощью интерпретатора, все не так хорошо работает. Я не уверен, как сделать основной поток до тех пор, пока все работы не будут завершены. Есть ли хороший способ сделать это, или я застрял в выполнении sleep 10 until work_units.empty?
в основном потоке