Python中的GIL全局解释器锁

GIL(全局解释器锁):

Global Interpreter Lock,每个线程在执行的过程都需要先获取GIL,保证同一时刻只有一个线程可以执行代码。GIL是存在于CPython解释器中,并不是Python语言层面的。

Python中完成多任务可以通过多进程、多线程、多协程的方式。在多线程完成多任务的时候,会存在资源竞争的情况。

在Python中可以使用互斥锁(mutex)使线程同步,来避免资源竞争的情况。(互斥锁是在Python代码自行添加的)

GIL其实也是同样的作用,在使用CPython的解释器,当一个线程执行时,会将全局共享的资源上锁,当该线程执行完后解锁,释放资源供其它线程再使用。(GIL是存在于CPython解释器中,只要使用的是Cpython解释器的话,就会有GIL)

所以其实在Python的多线程也被称为“伪多线程”,就是因为存在GIL。

线程释放GIL锁的情况:在IO操作等可能会引起阻塞的system call之前,可以暂时释放GIL,但在执行完毕后,必须重新获取GIL。

Python3.x使用计时器,执行时间达到阈值后,当前线程释放GIL;

Python2.x中的tickets计数器达到100;

计算密集型:进程(能够发挥多核cpu的功能)

IO密集型:线程、协程(硬盘读写速度是比较慢的,等待的时候就可以执行其他的请求)

猜你喜欢

转载自blog.csdn.net/qq_41571224/article/details/105376062