1.2 KiB
1.2 KiB
-
GIL(全局解释器锁)的本质:
- GIL是CPython解释器中的一个互斥锁
- 同一时间只允许一个线程执行Python字节码
- 目的是保护解释器内部数据结构,防止竞争条件
-
GIL对多线程的影响:
- CPU密集型任务:多线程无法利用多核优势,性能提升有限甚至更差
- I/O密集型任务:线程在等待I/O时会释放GIL,多线程可以有效提高性能
- 线程切换和GIL争抢会带来额外开销
-
多线程 vs 多进程选择:
| 场景 | 推荐 | 原因 |
|---|---|---|
| CPU密集型计算 | 多进程 | 避免GIL限制,充分利用多核 |
| I/O密集型任务 | 多线程 | 轻量级,切换成本低 |
| 需要共享大量数据 | 多线程 | 进程间通信成本高 |
| 需要高稳定性 | 多进程 | 进程崩溃不影响其他进程 |
| 需要启动大量并发 | 协程 | 更轻量,支持更高并发 |
-
解决方案:
- 使用
multiprocessing模块进行多进程编程 - 使用
concurrent.futures线程/进程池 - 使用Jython、IronPython等无GIL的解释器
- 将CPU密集型代码用C扩展实现
- 使用