Python与全局解释器锁

全局解释器锁(Global Interpreter Lock,简称CI.)是计算机程序设计语言解释器用于同步线程的工具,保证任何时刻仅有一个线程在执行
首先要申明的是,全局解释器锁并不是Python语言的特性,全局解释器锁是为了实现Pythoo解释器(主要是CPython,最流行的Python解释器)而引人的概念,并不是所有Python解释器都有全局解释器锁。Jython和lronPython没有全局解释器锁,可以完全利用多处理器系统。PyPy和CPython都有全局解释器锁。
CPython的线程是操作系统的原生线程,完全由操作系统调度线程的执行。一个CPython解释器进程内有一个主线程以及多个用户程序的执行线程。即使使用多核心CPU平台,由于全局解释器锁的存在,也将禁止多线程的并行执行,这样会损失许多多线程的性能。
在CPython中,全局解释器锁是一个互斥锁,用于保护对Python对象的访问,防止多条线程同时执行Python字节码。这种锁是必要的,主要是因为CPython的内存管理不是线程安全的。
在多线程环境中,CPython虚拟机按以下方式执行:
(1)设置全局解释器锁。
(2)切换到一个线程中去运行。
(3)运行:
①指定数量的字节码指令;
②线程主动让出控制[可以调用time.sleep(0)]
(4)把线程设置为睡眠状态。
(5)解锁全局解释器锁。
(6)再次重复以上所有步骤。
在调用外部代码(如C/C++扩展函数)的时候,全局解释器锁将会被锁定,直到这个函数结束为止(因为在这期间没有Python的字节码被运行,所以不会做线程切换)。

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页