闭坑指南 · 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 |