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