Grace's Dev Site
write关于我
闭坑指南 · Python#线程 #并发

GIL 与多线程

CPython 全局解释器锁让多线程无法并行执行 Python 字节码。

GIL 与多线程

GIL 是什么

Global Interpreter Lock:同一时刻只有一个线程执行 Python 字节码。

多线程仍有用的情况

  • I/O 阻塞(网络、磁盘):线程在等 I/O 时会释放 GIL
  • 调用释放 GIL 的 C 扩展(部分 numpy/加密库)

CPU 密集不要用多线程

计算密集型任务用 multiprocessing 或多进程 worker,每个进程独立 GIL。

数据竞争

counter += 1 读-改-写三步,多线程会丢更新。需要 threading.Lock 或原子结构。

总结

| 场景 | 建议 | |------|------| | 爬虫、读文件 | 线程 / asyncio | | 数值计算、图像处理 | 多进程 / 原生库 | | 高并发 Web | asyncio + 非阻塞 I/O |

在线运行 Python

Pyodide