Давайте этот код от этого вопроса:Что такое точка .join в Ruby threads?
Ruby multiple background threads
и добавьте строку:
require 'thread'
def foo(&block)
bar(block)
end
def bar(block)
Thread.abort_on_exception=true
@main = Thread.new { block.call }
end
foo {
sleep 2
puts 'thread_1'
}.join
puts 'main_thread'
Это выход я получаю:
thread_1
main_thread
Это может показаться логически многие, но это не для меня. я ожидал:
main_thread
thread_1
почему? Потому что так я вижу вещи
main_thread : ----------(starts thread_1)-(prints 'main_thread')--Done!
thread_1 : \-(sleeps 2 secs)----------(prints 'thread_1')--Done!
Но этого не происходит. Если я удалю часть .join, то «thread_1» даже не появится. Из моего понимания .join зависает (приостанавливает основной поток). Зачем? Разве это не против параллелизма? Помогите уточнить мой разум?
Это хороший подход? Согласиться на эту позицию? Что делать, если мне придется отлаживать проект 10k строк, что произойдет, если мне придется отлаживать подобные ситуации? –
Не уверен, что вы подразумеваете под «хорошим» подходом. Это зависит от того, что вы делаете. Re 10k line, будьте осторожны, что отладка многопоточных и связанных с параллелизмом проблем кода может быть очень сложной; убедитесь, что вы понимаете, что делаете перед погружением в потоки. –