【发布时间】:2019-06-14 06:17:37
【问题描述】:
我正在编写并发软件,毕竟我的文档都变红了,我确信多线程模块(与 asyncio 相同)绑定到单个 python 进程和运行它的单核。
但最近我的同事说,在某些来源(他找不到确切的链接)中,他发现操作系统会自动在可用内核之间分配由 python 产生的线程。 我听说操作系统可以管理线程但找不到关于 python 线程行为的明确信息,现在我有疑问了。
那么,操作系统是如何控制python线程的呢?
例如,https://realpython.com/async-io-python/ 或https://medium.com/contentsquare-engineering-blog/multithreading-vs-multiprocessing-in-python-ece023ad55a 表示多核使用需要多处理模块。
抱歉,我没有清晰描述问题的 sn-ps
【问题讨论】:
-
是的,它可能会,但是由于 GIL (wiki.python.org/moin/GlobalInterpreterLock),2 个 Python 线程不会同时运行。
-
@CristiFati 所以粗略地说,在运行 python 应用程序和 CPU 密集型任务的情况下,多核的这种使用是“无用的”?
-
@CristiFati 您能否将您的回复写为答案,以便我将其标记为解决方案?
-
我是说当涉及到并行计算(CPU 密集型操作,可以并行执行并且可以从多个内核中受益)时,线程 i> 是要避免的(multiprocessing 是首选)。
-
@CristiFati 我想知道......也许操作系统足够聪明,可以意识到它本质上是单线程的,并将其保持在同一个内核上以减少内核间开销?
标签: python python-3.x multithreading python-multithreading cpu-cores