Какое отношение Python GIL имеет к сборщику мусора? - PullRequest
11 голосов
/ 16 декабря 2009

Я только что видел этот раздел документации Unladen Swallow , который появился на Hacker News. По сути, инженеры Google говорят, что они не слишком оптимистичны в отношении удаления GIL. Однако, похоже, что есть дискуссия о сборщике мусора, перемежающемся с этим разговором о GIL. Может ли кто-нибудь объяснить мне отношение?

Ответы [ 3 ]

17 голосов
/ 16 декабря 2009

Действительно короткая версия состоит в том, что в настоящее время python управляет памятью с помощью подсчета ссылок + схема сборщика меток и циклов развертки, оптимизированная для задержки (вместо пропускной способности).

Это нормально, когда существует только один мутирующий поток, но в многопоточной системе вам нужно синхронизировать все время, когда вы изменяете refcounts, иначе у вас могут быть значения "падение через трещины" и синхронизация примитивы довольно дороги на современном оборудовании.

Если бы refcounts не менялись так часто, это не было бы проблемой, но почти каждая операция, которую вы делаете в cpython, может привести к тому, что refcount где-то изменится, поэтому возможны варианты GIL, делая refcounts с некоторым видом синхронизации (и буквально тратят почти все свое время на синхронизацию) или отказываются от системы пересчета для какого-то реального сборщика мусора.

1 голос
/ 17 декабря 2009

Я только что нашел другую точку зрения на эту тему здесь: http://renesd.blogspot.com/2009/12/python-gil-unladen-swallow-reference.html

1 голос
/ 16 декабря 2009

Ответ тунца в основном охватывает это. Если вы хотите получить более подробную информацию, здесь обсуждалась возможность удаления GIL без значительного влияния * на подсчет ссылок: http://mail.python.org/pipermail/python-ideas/2009-October/006264.html

...