🗒️Python中的GIL
type
status
slug
summary
tags
category
icon
password
Date
在 CPython 中,GIL是一个互斥锁,用于保护对Python对象的访问,防止多个线程同时执行 Python 字节码。GIL 防止竞态条件并确保线程安全。简而言之,这个互斥对象是必要的,主要是因为 CPython 的内存管理不是线程安全的。
- Python 中一个线程对应于C语言中的一个线程
- GIL 使得同一时刻只有一个线程在一个CPU内核上执行字节码。我们只要运行一个Python进程,不管里面有多少个线程,都只能运行在一个CPU内核上,而像JAVA,C等可以将多个线程映射到多个CPU内核上。无法将多个线程映射到多个CPU上,这样就无法体现CPU多核的优势,并发就非常受限
问题:
一个时刻只有一个线程运行在CPU上,那编写多线程是不是不用考虑线程间同步?
看这个例子:
total 的值,每次运行都不一样,说明GIL在某些时候会释放
GIL在什么时候会释放?
- GIL 会根据执行的字节码行数以及时间片释放GIL
- 遇到IO操作会释放
Loading...