multithreading - 只有多处理还是单个进程的多线程也使用多核?

标签 multithreading multiprocessing

单个进程的多线程会使用多个 CPU 吗?在 Python 线程中是真的吗? Java线程? C++线程?

最佳答案

在大多数语言(包括 Java 和 C++)中,每个线程可以同时在不同的内核上运行,从而(至少可能)在多核硬件上运行多个线程时显着加速。

然而,Python 是一个特例——至少在 CPython 中是这样。 (这是最常见的 Python 解释器)有一个 Global Interpreter Lock (又名 GIL),每个 Python 线程在执行 Python 字节码之前必须获得它。 GIL 是保持 Python 解释器状态一致所必需的,但是这个要求意味着即使你的 Python 进程中有多个线程,在任何给定的时刻只有一个线程会执行指令,这意味着你的 Python 程序将在多核硬件上运行时看不到任何性能提升/加速。该问题的唯一解决方法是:使用不同的语言,或使用不同的 Python 变体,或生成多个 Python 进程(每个 Python 进程将获得自己的解释器和自己的私有(private) GIL,因此它们都可以在平行线)。

关于multithreading - 只有多处理还是单个进程的多线程也使用多核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50770781/

相关文章:

c++ - 跨线程的 sigslot 信号

c - g++ ubuntu 多线程未定义引用

Python 多处理新手

Java线程调度: More busy wait threads than processors?

java - 如何在提交任何任务之前初始化固定线程池的所有线程? (Java)

django - 每天在特定时间清除表中的数据

python - 为什么 get() 在多处理中速度慢?

python - 如何使用 multiprocessing 遍历一个大的 URL 列表?

Python 多处理锁机制在获取锁时失败

python - 如何重复调用一个函数?