​​📄Упражнения для хорошей памяти: три способа оптимизировать работу с памятью на Go с помощью memory pools



Когда программа испытывает пиковую нагрузку, она потребляет много памяти. В языке Go это «замечает» Garbage Collector, останавливает программу и освобождает память. Сервис делает свою работу, но она влияет на эффективность программы, поэтому часто возникает необходимость снизить нагрузку на GC.



Go-разработчик в YADRO Александр Иванов столкнулся с проблемой: когда по сети приходило много данных, GC фиксировал пиковое потребление памяти, останавливал программу, освобождал память и продолжал выполнять программу.



Это влияло на эффективность работы, поэтому инженер решил уменьшить количество потребляемой памяти в моменты пиковой нагрузки и протестировал несколько способов, как это сделать. В этом материале он собрал результаты поисков и рассказал, для каких проектов подойдёт та или иная реализация memory pool. Вы узнаете:



О принципах, по которым язык Go работает с памятью;

Как завести Channel Pool, поместить память в sync.Pool или создать memory arena;

Какие бенчмарки получились у каждого решения по итогам тестов;

Что стоит учесть в разработке memory pool для вашего проекта и как выбрать подходящую реализацию;

Какая реализация в итоге помогла решить проблему с пиковыми нагрузками.



В конце статьи найдёте ссылку на репозиторий с кодом, где автор сравнивает разные memory pools.



Читать статью



#программы #go