为什么 .join() 方法在线程模块中被称为 .join() ?
Why is .join() method called .join() in the threading module?
这是一个相当愚蠢的问题...但它让我很烦恼。在 threading
模块中,我们有一个 Thread.join()
方法。
我知道它会阻塞调用线程,但为什么 .join()
被称为 'join'?为什么不叫 main_thread_wait
或 block_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."
之间会是模棱两可的
这是一个相当愚蠢的问题...但它让我很烦恼。在 threading
模块中,我们有一个 Thread.join()
方法。
我知道它会阻塞调用线程,但为什么 .join()
被称为 'join'?为什么不叫 main_thread_wait
或 block_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."