Multithreading 是否只有多处理或单个进程的多线程也会使用多核?

Multithreading 是否只有多处理或单个进程的多线程也会使用多核?,multithreading,multiprocessing,Multithreading,Multiprocessing,单个进程的多线程处理会使用多个CPU吗?在Python线程中是真的吗?Java线程?在大多数语言(包括java和C++)C++中,每个线程可以同时运行在不同的内核上,允许(至少潜在地)在多核硬件上运行多线程时显著加速。 然而,Python是一个特例——至少在(最常见的Python解释器)中,每个Python线程在执行Python字节码之前必须获得一个(也称为GIL)。GIL是保持Python解释器状态一致性所必需的,但这一要求意味着,即使Python进程中存在多个线程,在任何给定时刻,这些线程中

单个进程的多线程处理会使用多个CPU吗?在Python线程中是真的吗?Java线程?在大多数语言(包括java和C++)C++中,每个线程可以同时运行在不同的内核上,允许(至少潜在地)在多核硬件上运行多线程时显著加速。
然而,Python是一个特例——至少在(最常见的Python解释器)中,每个Python线程在执行Python字节码之前必须获得一个(也称为GIL)。GIL是保持Python解释器状态一致性所必需的,但这一要求意味着,即使Python进程中存在多个线程,在任何给定时刻,这些线程中只有一个将执行指令,这意味着您的Python程序在多核硬件上运行时不会看到任何性能提升/加速。解决这个问题的唯一办法是:使用不同的语言,或者使用不同的Python变体,或者生成多个Python进程(每个Python进程都有自己的解释器和自己的私有GIL,因此它们都可以并行执行)。

这取决于主机操作系统如何调度线程,并将它们分配给可用的内核和CPU。它还取决于线程是如何实现的(例如,Python/Java/C++运行时是如何有意地管理线程分配的,这与仅仅依靠主机来实现不同)。对于C++,这是定义的实现(例如,来自不同供应商的标准库可以不同地执行)。