GIL问题的理解

Python中有GIL为什么还需要线程同步?

简单说:线程的锁机制与CPU的锁(GIL)粒度不一样,GIL并不能保证线程安全

单个字节码操作(原子操作)是线程安全的,非原子操作是多字节码操作

所以我理解的GIL只是使一些简单的原子操作变成了线程安全的,而非那些原子操作的过程仍然
需要我们自己使用锁机制进行同步

GIL保证的是字节码同一时刻只能被一个线程执行,但是同一个操作可能对应多个字节码的,比如:

In [1]: import dis

In [2]: dis.dis(lambda x: x+1)
  1           0 LOAD_FAST                0 (x)
              3 LOAD_CONST               1 (1)
              6 BINARY_ADD
              7 RETURN_VALUE

假设刚好执行到了RETURN_VALUE时切换到另一个线程执行了相同操作中,X的值就改变了。

猜你喜欢

转载自blog.csdn.net/u012720990/article/details/81328107
GIL