11-1 多线程的GIL

# GIL: global interpreter lock (基于cpython写的)

# gil使得Python在多核cpu上也只能运行一个进程;所谓多核多个进程再跑是一个假象,他是来回切换的,

# 问题:GIL 在同一个进程直到结束才会释放吗?

total = 0
def add():
    global total
    for i in range(1000000):
        total += 1


def dec():
    global total
    for i in range(1000000):
        total -= 1

import threading


th1 = threading.Thread(target=add)
th2 = threading.Thread(target=dec)

th1.start()
th2.start()

th1.join()
th2.join()
print(total)

>>> 
382425
351753

问题:GIL 在同一个进程直到结束才会释放吗?

每次运行出来的结果是不一样的,证明GIL在进程运行过程中会释放,不会等到进程结束的时候才释放

结论 :

GIL在IO操作时会主动释放 ;
GIL会根据执行的字节码行数以及时间片释放GIL

你可能感兴趣的:(11-1 多线程的GIL)