Python的GIL

What全局解释器锁

  • (英语:Global Interpreter Lock,缩写GIL),是计算机程序设计语言解释器用于同步线程的一种机制,它使得任何时刻仅有一个线程在执行。即便在多核心处理器上,使用 GIL 的解释器也只允许同一时间执行一个线程

  Where GIL作用

  • 开发主要使用 GIL 的解释器CPython,CPython的线程是操作系统的原生线程
  • 一个Python解释器进程内有一个主线程,以及多个用户程序的执行线程
  • 即便使用多核心CPU平台,由于GIL的存在,也将禁止多线程的并行执行

  When 释放GIL锁

  • 当一个线程遇到I/O任务时,且CPU空闲时,将释放GIL。
  • 在单核CPU上,计算密集型(CPU-bound)的线程在执行大约100次解释器的计步(ticks)时,将释放GIL。可以通过sys.setcheckinterval()设置计步长度。

  Difference互斥锁和GIL锁

  • GIL锁: 保证同一时刻只有一个线程占用cpu,多线程的竞争GIL锁会无序执行
  • 互斥锁:保证多线程在修改共享数据时有序执行,避免数据混乱

  GIL优化

  • 使用新版python解释器,Python 3.2开始使用新的GIL。在当前线程保持这个锁,且其他线程请求这个锁时,当前线程就会在5毫秒后被强制释放该锁。
  • 创建独立的进程来实现并行化,Python 2.6引进了多进程包multiprocessing。
  • IO密集型操作时用多线程、协程
  • 计算密集型时用进程
原文地址:https://www.cnblogs.com/justblue/p/12997328.html