Перейти сборщик мусора с минимальными выделениями? - PullRequest
0 голосов
/ 11 мая 2018

Широко признано, что одним из главных факторов, сдерживающих производительность Go на уровне C ++, является сборщик мусора. Я хотел бы получить некоторую интуицию, чтобы помочь рассуждать о накладных расходах GC Go в различных обстоятельствах. Например, есть ли нетривиальные издержки GC, если программа никогда не касается кучи, или просто выделяет большой блок при настройке для использования в качестве пула объектов с самоуправлением? Вызывается ли GC каждые x секунд или при каждом распределении?

В качестве связанного вопроса: верно ли мое первоначальное предположение, что GC Go является основным препятствием для производительности уровня C ++, или есть некоторые вещи, которые Go просто делает медленнее?

1 Ответ

0 голосов
/ 11 мая 2018

Время паузы (остановка мира) для сбора мусора в Голанге составляет порядка нескольких миллисекунд, или в более позднем Голанге меньше. (увидеть https://github.com/golang/proposal/blob/master/design/17503-eliminate-rescan.md)

C ++ не имеет сборщика мусора , поэтому такие паузы не происходят. Однако C ++ не волшебство, и управление памятью должно происходить, если нужно управлять памятью для хранения объектов. Управление памятью все еще происходит где-то в вашей программе независимо от языка

Использование статического блока памяти в C ++ и отсутствие решения проблем управления памятью является подходом. Но Го может сделать это тоже. Чтобы узнать, как это сделать в настоящей высокопроизводительной программе Go, см. Это видео

https://www.youtube.com/watch?time_continue=7&v=ZuQcbqYK0BY

...