gpt4 book ai didi

Python 多线程和全局解释器锁

转载 作者:太空宇宙 更新时间:2023-11-03 14:50:22 24 4
gpt4 key购买 nike

我最近遇到了 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

关于Python 多线程和全局解释器锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46210945/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com