11-1 多线程的GIL
2018-08-26 本文已影响0人
正在努力ing
# 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