并发编程中的GIL锁(全局解释器锁)自己理解的他为啥存在
自己的分析GIL锁就是一个全局解释器锁 -这里涉及到一个小知识 也就是说我们再执行一个简单的赋值操作的时候,会经过好几道步骤,然后我们知道线程再运行的时候,可能会有多个线程同时运 但是这样也会造成我们的线程是没有办法实现多核cpu并行的操作的,他就只会是并发,如果要去实现并行也是可以的,就必须去开 正规的分析Python代码的执行由Python虚拟机(也叫解释器主循环)来控制。Python在设计之初就考虑到要在主循环中,同时只有一个线程在执行。虽然 Python 解释器中可以“运行”多个线程,但在任意时刻只有一个线程在解释器中运行。 对Python虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁能保证同一时刻只有一个线程在运行。 在多线程环境中,Python 虚拟机按以下方式执行: 设置 GIL; 切换到一个线程去运行; 运行指定数量的字节码指令或者线程主动让出控制(可以调用 time.sleep(0)); 把线程设置为睡眠状态; 解锁 GIL; 再次重复以上所有步骤。 在调用外部代码(如 C/C++扩展函数)的时候,GIL将会被锁定,直到这个函数结束为止(由于在这期间没有Python的字节码被运行,所以不会做线程切换)编写扩展的程序员可以主动解锁GIL。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |