什么是GIL?
顾名思义,这是一把存在于解释器中的一把锁,准确来说是CPython解释器内部的一把锁。
形成背景
在GIL产生的背景下,CPython在内部运动多线程时,每个线程都申请相应的全局资源,为了防止资源竞争而发生的错误,从而对所有线程申请全局资源增加的限制----全局解释器锁。
存在问题
在现今,多核cpu下,由于GIL锁的存在,导致程序不能充分的利用到cpu,导致资源浪费,效率较慢。
GIL什么时候释放
- 当线程执行超时后会自动释放
- 当前线程在阻塞状态时自动释放
- 当执行完成时
由于CIL锁在遇到阻塞状态时会自动释放,所有在I/O操作中,使用多线程来运行也会达到一个很好的效率
解决问题
由于是CPython历史遗留的问题,已经很难移出。
- 更换解释器
- 使用多进程代
- 使用C扩展