对GIL锁的理解

Python语言和GIL解释器锁没有关系,它是在实现Python解析器(CPython)时所引入的一个概念,同样一段代码可以通过CPython,PyPy,Psyco等不同的Python执行环境来执行,然而因为CPython是大部分环境下默认的Python执行环境。所以在很多人的概念里CPython就是Python,也就想当然的把GIL归结为Python语言的缺陷,所有GIL并不是python的特性,仅仅是因为历史原因在Cpython解释器中难以移除。

GIL保证同一时刻只有一个线程执行代码,每个线程在执行过程中都要先获取GIL

线程释放GIL锁的情况: 在IO操作等可能会引起阻塞的system call之前,可以暂时释放GIL,但在执行完毕后,必须重新获取GIL Python 3.x使用计时器(执行时间达到阈值后,当前线程释放GIL)或Python 2.x,tickets计数达到100

Python使用多进程是可以利用多核的CPU资源的。

多线程爬取比单线程性能有提升,因为遇到IO阻塞会自动释放GIL锁

GIL只对计算密集型的程序有作用,对IO密集型的程序并没有影响,因为遇到IO阻塞会自动释放GIL锁

当需要执行计算密集型的程序时,可以选择:1.换解释器,2.扩展C语言,3.换多进程等方案

你可能感兴趣的:(python学习笔记)