去掉GIL不容易

翻译 2007年09月12日 21:44:00
昨天,Juergen Brendel在他的博客中详细列出GIL的诸多不足。他声称这是我做的一个架构决策,而此决策限制了他的生产率。

我并不期待这个回复或其它任何回复能停止去除GIL的请求,尽管关于此问题已经有一个理由充分的FAQ条目。但我也不期望它能消失,直到其他人通过努力去除它,并且显示GIL的去除不会减慢单线程Python代码的效率。

这在以前已经试过了,结果令人失望,这也是为什么我自已不愿意花太多精力的原因。在1999年Greg Stein(和Mark Hammond?)创建了一个去掉GIL(我相信是1.5)的分支,在所有可变数据结构上把GIL替换为细粒度锁。他也提交了补丁,可以去掉在全局可变数据结构上的许多信赖(reliance),我接受了。然而,做过了基准测试之后,它显示即使是在有着最快速的锁原语的平台上(当时是Windows)它减慢了单线程的执行效率将近2倍,意味着,与一颗CPU有GIL相比,不用GIL需要2颗CPU才能快一些。(参见Greg关于性能的记录。)

我很欢迎如果有人按照Greg补丁(我在网上没有找到)的方法做了另外的试验,并且我也原意向Py3k引入一系列的补丁,但要保证对于单线程程序(和多线程但是I/O约束的程序)的性能不会降低。

我也会很高兴如果有人自告奋勇地维护一个无GIL的Python分支,假使单线程性能目标不能达到但是对于多线程CPU约束的应用有巨大的价值。我们甚至可以永久地终止部分代码基线的修改,仅仅允许根据编译的请求来生效。

然而,我想提醒一下,去掉GIL有许多的问题。它会使扩展模块变得复杂,不能再指望它们是在被GIL保护的“安全区”中被调用--一旦扩展有任何的全局可变数据,将不得不为多线程并发调用做好准备。也可能需要对Python/C API进行改动,它们是为了在一系列的调用中需要对某种对象加锁所需要的。

尽管这是我个人的意见,基于以上的考虑,去掉GIL没有太大的价值而不必花太多精力,但对于试图显示那个时代已经过去了的努力,我会欢迎和给予支持。然而,只是恳求是没有必要的--Python是开源的,并且我正在努力产生一个高质量的3.0语法的定义并且按计划实现。我想再一次指出并不是语言本身需要它--它只是由于CPython虚拟机在历史上还无法摆脱它。

原文链接

Python并发之GIL的限制

GIL是什么首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念。就好比C++是一套语言(语法)标准,但是可以用不同的编译器来编译成可执...
  • GVFDBDF
  • GVFDBDF
  • 2016年12月12日 10:10
  • 1246

导致Hbase挂掉的场景

导致Hbase挂掉的场景HMasterHMaster会出现异常(执行abort())停止的场景如下:1.zk异常导致的master停止服务是最常见的场景,涉及操作包含但不限于以下:  a)Zk链接超时...
  • zlfprogram
  • zlfprogram
  • 2017年07月01日 15:53
  • 2793

Python高级特性:全局解释器锁GIL基本概念

本文主要介绍全局解释器锁(Global Interceptor Lock)GIL的基础知识,涉及基本概念,工作原理,对多线程性能影响等。...
  • u010096900
  • u010096900
  • 2015年05月01日 22:49
  • 3156

金太阳顽固文件夹(不容易删除)

  • 2010年11月27日 21:26
  • 101KB
  • 下载

飞信mac版---不容易下到啊

  • 2012年05月16日 19:00
  • 7.54MB
  • 下载

应用程序调试技术PDF中文版带完整书签!不容易啊,后部分全是手工敲出来的!

  • 2009年08月24日 01:01
  • 9.87MB
  • 下载

MCR3318读卡器的驱动程序,不容易找到的。

  • 2010年04月16日 10:09
  • 124KB
  • 下载

好资源,大家共享,学习java 不容易!

  • 2009年08月01日 17:16
  • 179KB
  • 下载

微软研究院C++面试集(整理不容易)

  • 2009年12月17日 19:23
  • 497KB
  • 下载

软件开发者面试百问 想雇到搞软件开发的聪明人可不容易

  • 2010年08月23日 19:02
  • 466KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:去掉GIL不容易
举报原因:
原因补充:

(最多只允许输入30个字)