GIL(Global Interpreter Lock)与多线程

  1. GIL介绍

  2. GIL与Lock

  3. GIL与多线程

  4. 多线程性能测试

 

在Cpython解释器中,同一个进程下开启的多线程,同一时刻只能有一个线程执行,无法利用多核优势。

GIL并不是Python的特性,他是在实现Python解释器(Cpython)时所引入的一个概念,因为Cpython是大部分环境下默认的Python执行环境。

所以要明确一点:GIL并不是Python的特性,Python完全可以不依赖于GIL

一 GIL介绍

GIL本质就是一把互斥锁,既然是互斥锁,所有互斥锁的本质都一样,都是将并发运行变成串行,控制同一时间内共享的数据只能被一个任务修改,保证数据安全。

 有了GIL的存在,同一时刻同一进程中只有一个线程被执行(无法利用多核)

 GIL保护的是解释器级的数据,保护用户自己的数据则需要自己加锁处理

 

要想了解GIL,首先确定一点:每次执行python程序,都会产生一个独立的进程。例如python test.py,python aaa.py,python bbb.py会产生3个不同的python进程

'''
#验证python test.py只会产生一个进程
#test.py内容
import os,time
print(os.getpid())
time.sleep(1000)
'''
python3 test.py 
#在windows下
tasklist |findstr python
#在linux下
ps aux |grep python
验证python test.py只会产生一个进程

相关文章: