为什么 .join() 方法在线程模块中被称为 .join() ?

Why is .join() method called .join() in the threading module?

这是一个相当愚蠢的问题...但它让我很烦恼。在 threading 模块中,我们有一个 Thread.join() 方法。 我知道它会阻塞调用线程,但为什么 .join() 被称为 'join'?为什么不叫 main_thread_waitblock_parent_thread 或类似的名称?

每次看到.join(),我都觉得子线程正在加入一些东西来完成计算。为什么选择这个特定关键字作为方法名称有什么原因吗?

子线程加入父线程。 Thread.start让父线程生出一个线程,让它自由。 Thread.join 让父块(等待)直到子块完成它的工作。

你可以这样想象:

  • 父线程是能长寿的大神
  • Thread.start生下凡人
  • 凡人一出生就逃跑并开始过自己的生活(执行其run方法)
  • 上帝可能会继续管他自己的事
  • 他也可能想看看他的后代,看看是否真的 is_alive
  • 他也可能开始观察后代的整个生命,等着他回来,直到后者死去(这就是join的方法)。在这样做的同时,神不能做任何其他事情,因为他非常喜欢欣赏他的生物(对 join 的调用阻塞了父线程),但是在凡人死后,神可以继续他的生命

这个名字比 Python 早得多。它出现在 POSIX 线程库 (libpthread) 中,作为 pthread_join() (the "pthread" prefix is used because C has no namespaces). However, for process level concurrency, both Python and POSIX 使用名称 wait().

pthread 库的其他部分确实使用术语等待,但通常用于更高级别的同步原语,例如 pthread_barrier_wait() or pthread_cond_wait()。我想 pthread_wait() 在 "wait for [some synchronization object]" 和 "wait for a thread to terminate."

之间会是模棱两可的