Мои записи в базе данных уже классифицированы в ведра (0, 1, 2, 3). Вместо того, чтобы последовательно применять функцию к каждой записи, я хотел бы открыть четыре потока и применить функцию к записи в ведре этого потока.Ruby multi threading #join и одновременное выполнение
Если я запускаю это:
i = 4
i.times do |n|
Thread.new {
puts "opening thread for #{n} degree"
myFunction(n)
}.join
end
я получаю:
opening thread for 0 degree
opening thread for 1 degree
opening thread for 2 degree
opening thread for 3 degree
с ожиданием между каждой из них. Это по-прежнему идет серийно.
Если бы я сделать то же самое, что и выше, но без join
:
i = 4
i.times do |n|
Thread.new {
puts "opening thread for #{n} degree"
myFunction(n)
}
end
я получаю:
opening thread for 3 degree
opening thread for 2 degreeopening thread for 0 degree
opening thread for 4 degree
который ближе к тому, что я хочу; кажется, все они работают одновременно.
Это заставляет меня нервничать, когда мои заявления о предложениях печатаются случайным образом. Если у меня нет join
, разве это не означает, что какой-либо поток заканчивается первым, остальная часть скрипта перемещается, а остальные потоки заканчиваются раньше? Что мне делать?