fbpx
维基百科

全局解释器锁

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

Python的GIL

  • CPython的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个Python解释器进程内有一个主线程,以及多个用户程序的执行线程。即便使用多核心CPU平台,由于GIL的存在,也将禁止多线程的并行执行。[2]
  • Python解释器进程内的多线程是以协作多任务方式执行。当一个线程遇到I/O任务时,将释放GIL。计算密集型(CPU-bound)的线程在执行大约100次解释器的计步(ticks)时,将释放GIL。计步(ticks)可粗略看作Python虚拟机的指令。计步实际上与时间片长度无关。可以通过sys.setcheckinterval()设置计步长度。
  • 在单核CPU上,数百次的间隔检查才会导致一次线程切换。在多核CPU上,存在严重的线程颠簸(thrashing)。
  • Python 3.2开始使用新的GIL。新的GIL实现中用一个固定的超时时间来指示当前的线程放弃全局锁。在当前线程保持这个锁,且其他线程请求这个锁时,当前线程就会在5毫秒后被强制释放该锁。
  • 可以创建独立的进程来实现并行化。Python 2.6引进了多进程包multiprocessing。或者将关键组件用C/C++编写为Python扩展,通过ctypes使Python程序直接调用C语言编译动态链接库的导出函数。

参考文献

  1. ^ GlobalInterpreterLock - Python Wiki. [2018-07-19]. (原始内容于2018-06-23) (英语). 
  2. ^ David Beazley. Inside the Python GIL (PDF). Chicago: Chicago Python User Group. 2009-06-11 [2009-10-07]. (原始内容 (PDF)于2010-12-24). 

全局解释器锁, 此條目或其章節极大或完全地依赖于某个单一的来源, 2014年5月7日, 请协助補充多方面可靠来源以改善这篇条目, 致使用者, 请搜索一下条目的标题, 来源搜索, 网页, 新闻, 书籍, 学术, 图像, 以检查网络上是否存在该主题的更多可靠来源, 判定指引, 英語, global, interpreter, lock, 缩写gil, 是计算机程序设计语言解释器用于同步线程的一种机制, 它使得任何时刻仅有一个线程在执行, 即便在多核心处理器上, 使用, 的解释器也只允许同一时间执行一个线程, 常见的使用. 此條目或其章節极大或完全地依赖于某个单一的来源 2014年5月7日 请协助補充多方面可靠来源以改善这篇条目 致使用者 请搜索一下条目的标题 来源搜索 全局解释器锁 网页 新闻 书籍 学术 图像 以检查网络上是否存在该主题的更多可靠来源 判定指引 全局解释器锁 英語 Global Interpreter Lock 缩写GIL 是计算机程序设计语言解释器用于同步线程的一种机制 它使得任何时刻仅有一个线程在执行 1 即便在多核心处理器上 使用 GIL 的解释器也只允许同一时间执行一个线程 常见的使用 GIL 的解释器有CPython与Ruby MRI Python的GIL 编辑CPython的线程是操作系统的原生线程 在Linux上为pthread 在Windows上为Win thread 完全由操作系统调度线程的执行 一个Python解释器进程内有一个主线程 以及多个用户程序的执行线程 即便使用多核心CPU平台 由于GIL的存在 也将禁止多线程的并行执行 2 Python解释器进程内的多线程是以协作多任务方式执行 当一个线程遇到I O任务时 将释放GIL 计算密集型 CPU bound 的线程在执行大约100次解释器的计步 ticks 时 将释放GIL 计步 ticks 可粗略看作Python虚拟机的指令 计步实际上与时间片长度无关 可以通过sys setcheckinterval 设置计步长度 在单核CPU上 数百次的间隔检查才会导致一次线程切换 在多核CPU上 存在严重的线程颠簸 thrashing Python 3 2开始使用新的GIL 新的GIL实现中用一个固定的超时时间来指示当前的线程放弃全局锁 在当前线程保持这个锁 且其他线程请求这个锁时 当前线程就会在5毫秒后被强制释放该锁 可以创建独立的进程来实现并行化 Python 2 6引进了多进程包multiprocessing 或者将关键组件用C C 编写为Python扩展 通过ctypes使Python程序直接调用C语言编译的动态链接库的导出函数 参考文献 编辑 GlobalInterpreterLock Python Wiki 2018 07 19 原始内容存档于2018 06 23 英语 David Beazley Inside the Python GIL PDF Chicago Chicago Python User Group 2009 06 11 2009 10 07 原始内容存档 PDF 于2010 12 24 取自 https zh wikipedia org w index php title 全局解释器锁 amp oldid 72509633, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。