Python高级笔记(一) -- GIL (全局解释器锁)

1. GIL概念 (cpython历史遗留问题)

概念? 对Python多线程的影响? 编写一个多线程抓取网页的程序? 阐述多线程抓取程序是否比单线程性能有提升, 并解释原因。

  • GIL:全局解释器锁, 每个线程在执行的过程都需要先获取GIL, 保证同一时刻只有一个线程可以执行代码

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

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

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

  • GIL适合在: 计算密集型程序:多进程-能够发挥多核的威力、IO密集型程序:多线程

2. GIL 

2.1 2个线程

假多线程, 只有一个线程在执行, 因为GIL存在,发挥不出多核的优势。

2.2 2个进程

真并发

3. 解决GIL版本

  • 换Python解释器

  • 调C代码执行程序

原文地址:https://www.cnblogs.com/douzujun/p/10764853.html