目录
定义:
In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple
native threads from executing Python bytecodes at once. This lock is necessary mainly
because CPython’s memory management is not thread-safe. (However, since the GIL
exists, other features have grown to depend on the guarantees that it enforces.)
在CPython中,全局解释器锁(GIL),本质是一把互斥锁。用于防止本地线程,多次调用执行Python字节码。
这把锁存在的必要,是因为CPython的内存管理不是线程安全的。(然而,自从GIL存在,其他功能已经发展到依赖于它所执行的保证。
系统层面的线程处理:
- 系统开启多线程
- 线程编译代码,查找语法错误
- 调用解释器外的GIL锁
- 抢到GIL锁的线程,调用解释器执行程序代码
- 结束代码执行,释放GIL锁
未加GIL锁存在的安全隐患(线程安全):
对于同一个数据,线程1的处理是使用数据计算,垃圾回收线程的处理是进行回收。因为进行并发执行,存在恰好,线程1在处理数据前,进行了IO操作导致被垃圾回收线程夺取了解释器执行权,则等线程1再次获取权限执行的时候,数据已经被回收。
原因:1.相同进程内的线程数据共享 2.当CPU处理资源遇到IO操作等会进行权限切换
GIL总结:
- GIL本质是一把互斥锁,相当于使用Cpython解释器的权限,默认每一个进程内都存在一把GIL。
- 同一进程内的多个