首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python多线程和全局解释器锁

Python多线程和全局解释器锁
EN

Stack Overflow用户
提问于 2017-09-14 05:08:35
回答 1查看 1.1K关注 0票数 3

我最近遇到了Python中的GIL,根据它,一次只能执行一个线程,而多线程不能使用所有的内核。

现在,在我的一个项目中,我使用了多线程以及很多锁和信号量,所以这里我的问题是,如果我不使用锁和信号量,我能实现同样的目标吗?也就是说,如果我从我的项目中删除并发逻辑。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-14 05:50:06

全局解释器锁确保只有一个线程同时执行字节码。执行过程随时可能被打断。

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

代码语言:javascript
复制
def f(x, a, b):
    x.a, x.b = a, b

下面是它分解为字节码的过程。

代码语言:javascript
复制
          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 (at 10)和存储b (at 16)之间被中断。中断线程现在将看到x处于不一致的状态。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46210945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档