GIL(Global Interpreter Lock)与多线程
-
GIL介绍
-
GIL与Lock
-
GIL与多线程
-
多线程性能测试
在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