Python GIL

  1. Python 中一个线程对应于C语言中的一个线程
  2. GIL 使得同一时刻只有一个线程在一个CPU内核上执行字节码。我们只要运行一个Python进程,不管里面有多少个线程,都只能运行在一个CPU内核上,而像JAVA,C等可以将多个线程映射到多个CPU内核上。无法将多个线程映射到多个CPU上,这样就无法体现CPU多核的优势,并发就非常受限

一个时刻只有一个线程运行在CPU上,那编写多线程是不是不用考虑线程间同步?

看这个例子:

import threading

total = 0

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

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


thread1 = threading.Thread(target=add)
thread2 = threading.Thread(target=desc)
thread1.start()
thread2.start()

thread1.join()
thread2.join()

print(total)

total 的值,每次运行都不一样,说明GIL在某些时候会释放

GIL在什么时候会释放?

  1. GIL 会根据执行的字节码行数以及时间片释放GIL
  2. 遇到IO操作会释放
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容