Python多线程和全局解释器锁



i最近遇到了python中存在的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

最新更新