У меня есть вычисление, которое можно разделить на независимые единицы, и способ, которым я сейчас им занимаюсь, заключается в создании фиксированного числа потоков и последующей передаче кусков работы, выполняемой в каждом потоке.Таким образом, в псевдокоде вот как это выглядит
# 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, но когда я выполняю скрипт с использованием интерпретатора, вещи не работают так хорошо.Я не уверен, как заставить основной поток ждать, пока вся работа не будет закончена.Есть хороший способ сделать это, или я застрял с выполнением sleep 10 until work_units.empty?
в основной теме