Почему метод .join () называется .join () в поточном модуле? - PullRequest
0 голосов
/ 08 июня 2018

Это довольно глупый вопрос ... и все же он меня бесит.В модуле threading у нас есть метод Thread.join().Я понимаю, что он блокирует вызывающий поток, но почему .join() называется "присоединиться"?Почему это не называется main_thread_wait или block_parent_thread или что-то в этом роде?

Каждый раз, когда я вижу .join(), я чувствую, что дочерняя нить присоединяется к чему-то, чтобы выполнить вычисления.Есть ли какая-то причина, почему именно это ключевое слово было выбрано для имени метода?

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Это имя намного старше, чем Python.Он отображается в библиотеке потоков POSIX (libpthread) как pthread_join() (используется префикс "pthread", поскольку в C нет пространств имен).Однако для параллелизма на уровне процесса как Python , так и POSIX используют имя wait().

В других частях библиотеки pthread используется термин wait, но обычнодля высокоуровневых примитивов синхронизации, таких как pthread_barrier_wait() или pthread_cond_wait().Я полагаю, что pthread_wait() было бы неоднозначно между «ждать [некоторый объект синхронизации]» и «ждать завершения потока».

0 голосов
/ 08 июня 2018

дочерний поток присоединяется к родительскому.Thread.start заставляет родителя родить нить и освободить ее.Thread.join заставляет родительский блок (ждать), пока ребенок не выполнит свою работу.

Вы можете представить это так:

  • родительский поток - могущественный бог, который можетпрожить долгое время
  • с Thread.start он рождает смертного
  • сразу после своего рождения смертный убегает и начинает жить своей собственной жизнью (выполняя свой метод run)
  • бог может продолжать заниматься своим делом
  • он также может захотеть взглянуть на свое потомство, чтобы узнать, буквально ли это is_alive
  • он такжеможет начать наблюдать всю жизнь потомства, ожидая его возвращения, вплоть до смерти последнего (это метод join).Делая это, бог не может делать ничего другого, потому что ему так нравится восхищаться своим существом (призыв к join блокирует родительскую нить), но после смерти смертного бог может продолжить свою жизнь
...