🐍Python 并发与异步

GIL与多线程多进程

面试回答

常见问法

GIL 是什么?它到底限制了什么?

回答

GIL 是全局解释器锁。在 CPython 中,同一时刻通常只有一个线程能执行 Python 字节码。它不是说“Python 不能并发”,而是限制了 CPU 密集型 Python 代码在线程间真正并行执行。

因此常见结论是:

  • IO 密集:多线程通常仍然有价值
  • CPU 密集:更常用多进程
from threading import Thread
from multiprocessing import Process

追问

  • 为什么 IO 密集任务在线程里仍然有效
  • 多进程为什么能绕过 GIL
  • GIL 是 Python 语言限制还是 CPython 实现细节

原理展开

当线程等待网络、磁盘等 IO 时,会让出执行机会,因此多线程仍然能提升 IO 场景吞吐。

但如果是纯 Python 计算:

  • 多个线程会轮流拿 GIL
  • 真正 CPU 并行度上不去

多进程则因为每个进程有独立解释器和独立 GIL,更适合 CPU 密集任务。

面试速答可以是: “GIL 限制的是同一进程内多个线程同时执行 Python 字节码,不等于 Python 完全不能并发。”

易错点

  • 说成“Python 不能多线程”
  • 不区分 IO 密集和 CPU 密集
  • 把 GIL 当作所有 Python 实现都完全一致的规则