Files
Knowledge/0 编程/Python GIL 锁.md
T

27 lines
1.2 KiB
Markdown

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