Python程序运行在多核CPU上的问题

众所周知,Python由于历史遗留的GIL问题,不借助特殊的手段,是无法在多核上运行的。

于是写了一段多线程跑死循环,想验证一下:

import threading, multiprocessing

def loop():
    x = 0
    while True:
        x ^= 1
        print(x)

for i in range(multiprocessing.cpu_count()):
    t = threading.Thread(target=loop)
    t.start()

这一验证验证出问题了,通过性能监视发现,轻轻松松跑满了8个逻辑核。如下图

img

此时运行环境是Win 11,Python 3.10。然后我又换到WSL环境测试,Kali-Linux,Python 3.9.7,得到了一样的结论。。

img

是哪里出了问题?

GIL ,有些不同的说法
参考下这个

由于存在全局解释器锁,同一时刻只有一个线程可以执
行 Python 代码(虽然某些性能导向的库可能会去除此限制)。如果你想让你的应用更好地利用多核心计算
机的计算资源,推荐你使用multiprocessing 或concurrent.futures.ProcessPoolExecutor。
但是,如果你想要同时运行多个 I/O 密集型任务,则多线程仍然是一个合适的模型。