Python中的GIL(Global Interpreter Lock)即全局解释器锁,它的主要作用是确保同一时间只有一个线程在执行Python字节码。
GIL确保了同一进程中的多线程安全,防止多个线程同时执行时导致数据混乱。比如:
## python www.itzhimei.com 代码
import threading
count = 0
def increment():
global count
for _ in range(100):
count += 1
t1 = threading.Thread(target=increment)
t2 = threading.Thread(target=increment)
t1.start()
t2.start()
t1.join()
t2.join()
print(count) # 最后输出200
如果没有GIL,两个线程同时执行count += 1时可能只增加1,结果就错误了。
但GIL也带来了阻塞问题,一个执行CPU密集型代码的线程可能会长时间占用GIL,阻塞其他线程。
所以Python多线程适合IO密集型任务,对CPU密集型任务并发效果不佳。了解GIL的原理可以避免一些并发问题。