[英]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.