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扩展实现