繁体   English   中英

Python多线程和全局解释器锁

[英]Python multithreading and Global Interpreter Lock

我最近遇到了Python中存在的GIL,根据该GIL,一次只能执行一个线程,多线程无法利用所有内核。

现在在我的一个项目中,我使用多线程和许多锁和信号量所以在这里我的问题是,如果我不使用锁和信号量,我可以实现相同的目的吗? 即如果我从我的项目中删除并发逻辑。

编辑:我想知道的是,如果我删除并发逻辑是否可以获得相同的功能,我知道什么是GIL并且它阻止线程使用所有核心并且一次只运行一个线程。

全局解释器锁确保只有一个线程一次执行字节代码 执行可以随时中断。

考虑这个简单的函数,它可能用于将相关值原子地存储到实例x上的属性

def f(x, a, b):
    x.a, x.b = a, b

这是它反汇编成字节码

          0 LOAD_FAST                1 (a)
          3 LOAD_FAST                2 (b)
          6 ROT_TWO
          7 LOAD_FAST                0 (x)
         10 STORE_ATTR               0 (a)
         13 LOAD_FAST                0 (x)
         16 STORE_ATTR               1 (b)
         19 LOAD_CONST               0 (None)
         22 RETURN_VALUE

假设x不受mutex保护。 然后任何线程中执行f(x, 1, 2)可以很容易地存储之间被中断a (在10 ),并存储b (在16 )。 那个中断线程现在会看到x处于不一致状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM