📄Упражнения для хорошей памяти: три способа оптимизировать работу с памятью на Go с помощью memory pools
Когда программа испытывает пиковую нагрузку, она потребляет много памяти. В языке Go это «замечает» Garbage Collector, останавливает программу и освобождает память. Сервис делает свою работу, но она влияет на эффективность программы, поэтому часто возникает необходимость снизить нагрузку на GC.
Go-разработчик в YADRO Александр Иванов столкнулся с проблемой: когда по сети приходило много данных, GC фиксировал пиковое потребление памяти, останавливал программу, освобождал память и продолжал выполнять программу.
Это влияло на эффективность работы, поэтому инженер решил уменьшить количество потребляемой памяти в моменты пиковой нагрузки и протестировал несколько способов, как это сделать. В этом материале он собрал результаты поисков и рассказал, для каких проектов подойдёт та или иная реализация memory pool. Вы узнаете:
▪О принципах, по которым язык Go работает с памятью;
▪Как завести Channel Pool, поместить память в sync.Pool или создать memory arena;
▪Какие бенчмарки получились у каждого решения по итогам тестов;
▪Что стоит учесть в разработке memory pool для вашего проекта и как выбрать подходящую реализацию;
▪Какая реализация в итоге помогла решить проблему с пиковыми нагрузками.
В конце статьи найдёте ссылку на репозиторий с кодом, где автор сравнивает разные memory pools.
Читать статью ➡
#программы #go
Post #212
3.57K