Является ли следующее неэффективным? Я хочу выделить почти все ресурсы для потоков, но мне интересно, будет ли в этом случае использовать этот цикл для большого количества процессорного времени.Как эффективно контролировать Ruby Threads?
Спасибо!
threads = create_threads #method that returns an Array of Threads
loop do
alive = false
threads.each do |thread|
if thread.alive?
alive = true
end
end
break unless alive
end
Но это поражает многопоточность, поскольку параллелизм эффективно отключен. Я все еще хочу, чтобы Ruby переключался между основным потоком, нитью 1, нитью 2 и т. Д. – Alexandre
Он по-прежнему переключается между потоками, и он ждет, пока они все не закончатся, прежде чем продолжить. Если thread1 работает долго, а thread2 - нет, и мы ожидаем соединения в thread1, thread2 будет продолжать выполнять и заканчивать. Когда thread1 будет закончен, мы назовем join на thread2, который немедленно вернется. – Farrel
Hi Farrel, Вы правы, остальные потоки продолжают выполняться. Этот пример прояснил это для меня. http://pastebin.org/90678 – Alexandre