Сборка мусора делает Python медленнее? - PullRequest
7 голосов
/ 23 июня 2011

ОК, поэтому мы разрабатываем приложение, связанное с сетью, где пользователь может загрузить свои собственные сценарии Python, чтобы выбрать алгоритм. Наш код содержит модули c и cython и python.

Поскольку для нас крайне важно избежать задержек, объема памяти и минимальной обработки, мы задались вопросом, разумно ли и эффективно (с точки зрения производительности) отключать сборку мусора и самостоятельно обрабатывать освобождение памяти.

Ответы [ 6 ]

18 голосов
/ 23 июня 2011

Просто позвольте языку делать то, что он хочет, и если вы обнаружите, что у вас есть реальная проблема, вернитесь и напишите об этом. В противном случае это преждевременная оптимизация.

11 голосов
/ 23 июня 2011

gc.disable отключает только циклический сборщик мусора.Объекты по-прежнему будут собираться, когда рефконт все равно упадет до нуля.Так что, если у вас нет много циклических ссылок, это не будет иметь никакого значения.

Вы говорите о создании пользовательской сборки Python и отключении GC подсчета ссылок?

5 голосов
/ 23 июня 2011

Просто разработайте приложение, чтобы оно было функционально правильным.Как только вы получили правильное приложение, запустите профилировщик и определите, где находятся медленные биты.Если вас беспокоит производительность пользовательских сценариев, вы, вероятно, сосредотачиваетесь не на том.

Короче, ответ заключается в том, что, вероятно, неразумно и неэффективно пытаться оптимизировать до завершения первоначальной разработки.

4 голосов
/ 23 июня 2011

Сборка мусора делает все медленнее.Это также делает все намного менее подверженным ошибкам.Особенно, если дело в том, чтобы запускать загруженные пользователем сценарии, мне трудно поверить, что компромисс будет удачным;если у вас есть утечка или двойное освобождение, теперь у вас есть уязвимость DoS, если кто-то может выяснить, как ее вызвать.

2 голосов
/ 23 июня 2011

Я потратил довольно много времени на работу с языками с автоматической сборкой мусора, и я могу почти в одностороннем порядке сказать, что доверять собственной сборке мусора будет быстрее и надежнее, чем пользовательское решение.

1 голос
/ 23 июня 2011

CPython (оригинальный и наиболее используемый Python) использует подход подсчета ссылок для сборки мусора: объекты, на которые больше нет ссылок, немедленно освобождаются.Поэтому, если вы не создаете какие-либо циклы, сборщик мусора, который существует только для обнаружения циклов, не должен часто вызываться.

...