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的值就改变了。