GIL
GIL:全局解释器锁;作用:保证同一时间内只有一个线程再使用CPU
GIL对python多线程中有什么影响:由于cpython解释器原因,每个进程内只有一个GIL锁,
当其中一个线程得到GIL锁,才可以使用cpu,所以多核cpu也不能实现并行操作,并不能完
全利用cpu
多线程和单线程的效率区别:
- 在 处理像科学计算 这类需要持续使用cpu的任务的时候 单线程会比多线程快
- 在 处理像IO操作等可能引起阻塞的这类任务的时候 多线程会比单线程快
释放Gil锁问题:
遇到像 i/o操作这种 会有时间空闲情况 造成cpu闲置的情况会释放Gil
会有一个专门ticks进行计数 一旦ticks数值达到100 这个时候释放Gil锁 线程之间开始竞争Gil锁(说明:ticks这个数值可以进行设置来延长或者缩减获得Gil锁的线程使用cpu的时间)
篮子:进程,刀子:gil锁,线程:苹果,执行线程:削苹果,耗时操作:吃苹果,人:cpu
(稍微注意下,是线程在争抢gil锁,而不是cpu在争抢,只作为参考)
一个篮子里有很多苹果和一把刀,指的是一个进程内有多个线程和一个gil锁;
一个人拿到刀削苹果,指的是一个cpu拿到gil锁,然后去执行线程;
在同一时间内,只有一个人在削苹果,指的是在一个进程内,同一时间内只有一个cpu在执行一个线程
如果一个苹果被削完了,想被吃掉,但是又不用刀,人就会把刀放回篮子里,指的是线程遇到IO操作系统会释放gil锁。
如果削累了,体力极限了,也会把刀放在篮子里,指的是ticks数据达到100,会释放gil锁
无论有多少个人,只要是一个篮子一把刀,都是一个人在削苹果,指的是无论多少核的CPU,无论一个进程内开了多少线程,只要是在一个进程内,都只是CPU在执行一个线程。
如果刀放在篮子里,苹果们都在争抢被削,就会消耗苹果的体力,而且削苹果速度慢,指的是如果多个线程在争抢GIL锁会导致资源浪费以及效率更低()
多个篮子里有多把刀,多个人分别在不同篮子内削苹果,可以使得削苹果速度增加。指的是开启多进程,CPU去执行不同进程内的一个线程,这样充分利用了CPU的效益。