什么是Python GIL?
·
● python语言和GIL本身没有任何关系,是由于历史原因,在编写Cpython解释器时(用c语言写的python解释器),加入了GIL并且难以移除。
● GIL:全局解释器锁。每个线程在执行的过程都需要先获取GIL,保证同一时刻只有一个线程可以执行代码
● 线程释放GIL锁的情况:在IO操作等可能会引起阻塞的system call之前,可以暂时释放GIL,但在执行完毕后,必须重新获取GIL锁
● 多线程爬取比单线程性能有提升,因为遇到IO阻塞会自动释放GL锁
·
计算密集型 (中间没有阻塞,大规模不断地重复运行计算):适合于多进程
IO密集型 (中间有阻塞,线程在等待的时候,GIL会让等待的线程去做其他事,让另一个线程代替去等待):适合于多线程,协程
·
● 如何避免GIL(如何解决GIL问题):
换其他的解释器 or 换其他的语言(如C语言)来替代线程所要做的事情