Python的GIL与垃圾收集器有什么关系?

时间:2009-12-16 13:16:57

标签: python garbage-collection gil unladen-swallow

我刚看到this section of Unladen Swallow's documentation出现在Hacker News上。基本上,谷歌工程师说他们对删除GIL并不乐观。然而,似乎有关于垃圾收集器的讨论穿插在这个关于GIL的讨论中。有人可以向我解释这种关系吗?

3 个答案:

答案 0 :(得分:17)

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

当只有一个变异线程时,这一切都很好,但在多线程系统中,您需要同步修改refcounts的所有时间,否则您可以使值“落入裂缝”,并且同步原始在现代硬件上相当昂贵。

如果refcounts没有经常更改,这不会有问题,但几乎你在cpython中执行的每一个操作都会导致refcount在某处更改,所以选项是GIL,用某种方式进行refcounts同步(并且几乎把所有时间花在同步上),或者放弃引用系统以获得某种真正的垃圾收集器。

答案 1 :(得分:1)

Tuna-Fish的答案基本上涵盖了它。如果您需要更多详细信息,我们会讨论如何删除GIL,而不会对此处的引用计数产生 影响:http://mail.python.org/pipermail/python-ideas/2009-October/006264.html

答案 2 :(得分:1)

我刚才在这个问题上找到了另一种观点:http://renesd.blogspot.com/2009/12/python-gil-unladen-swallow-reference.html