Global Intepreter lock(全局解释器锁)

  • Python-解释语言

编译器:类似JAVA,生成中间文件.class文件
解释器:类似Python,不生成中间文件,可以直接运行
1.png

  • Python是解释语言,其操作原理如下:

    • 读一行代码--->解释为字节码--->运行字节码--->读取下一行(终行结束)
  • Python-变量回收
  • Python中一个变量的回收实现,是存在一个引用计数变量(以下简称引用计数),当它变为0的时候,这个变量就会被释放,下图是个引用计数的例子.
import sys
a=[]
b=a
sys.getrefcount(a)
#3

getrefcount(a) 显示a的引用计数变量,现在的值.

  • 在资源竞争状态下,比如多个线程,如果这个引用计数不被保护起来,那么可能就会出现内存泄露,即一个资源无法被释放,或者一个资源还存在,却发生s不正确的释放.
  • GIL只能保证同一时刻同一CPU上只有一个线程执行,但不能保证线程切换的时候能把一行代码翻译成的字节码执行完,这就会出现问题,所以说只是一定程度上的保证线程安全。
  • GIL只存在于Cpython解释器中,也即是在解释器层面限制了多线程的执行.
  • 对于其他语言,有一些没有使用GIL,如Java.

先记录这些,留个坑来补.

reference:

https://www.cnblogs.com/2bjiujiu/p/9150380.html

https://realpython.com/python-gil/

标签: none

添加新评论