11

我刚刚在 Hacker News 上看到了 Unladen Swallow 文档的这一部分。基本上,是谷歌工程师说他们对删除 GIL 并不乐观。然而,似乎有关于垃圾收集器的讨论穿插在关于 GIL 的讨论中。有人可以和我解释一下这种关系吗?

4

3 回答 3

18

真正简短的版本是,当前 python 使用引用计数+标记和清除循环收集器方案来管理内存,针对延迟(而不是吞吐量)进行了优化。

当只有一个 mutating 线程时这一切都很好,但在多线程系统中,您需要在修改 refcount 的所有时间进行同步,否则您可能会有值“落入裂缝”,并且同步原语相当现代硬件价格昂贵。

如果引用计数不经常更改,这不会是一个问题,但是您在 cpython 中执行的几乎每一个操作都可能导致引用计数在某处发生更改,因此选项是 GIL,使用某种同步进行引用计数(并且几乎把你所有的时间都花在了同步上),或者放弃引用计数系统来使用某种真正的垃圾收集器。

于 2009-12-16T13:51:19.467 回答
1

我刚刚在这里找到了关于这个主题的另一种观点: http ://renesd.blogspot.com/2009/12/python-gil-unladen-swallow-reference.html

于 2009-12-17T12:50:09.393 回答
1

金枪鱼的答案基本上涵盖了它。如果您想了解更多详细信息,这里讨论了如何删除 GIL 而不会对引用计数产生太大影响:http: //mail.python.org/pipermail/python-ideas/2009-October/ 006264.html

于 2009-12-16T14:01:03.813 回答