УБИЙЦА вашей производительности в Go — ESCAPE ANALYSIS
Igor Panasyuk
0:00 / 0:00
УБИЙЦА вашей производительности в Go — ESCAPE ANALYSIS
2 187 просмотров · 1 год назад
Igor Panasyuk
2,79 тыс. подписчиков
2 187 просмотров · 1 год назад
Материалы из видео - https://t.me/igoroutine/82
Курсы по программированию - https://igoroutine.courses/?utm_sourc...
В этом выпуске мы начинаем с введения и плавно переходим к обзору загадочной функции, которая при поверхностном рассмотрении выглядит корректной, но на практике ведёт себя иначе. После запуска бенчмарка становится ясно, что есть скрытая проблема, и мы подробно обсуждаем, как именно бенчмарки помогают её выявить. Основная часть посвящена устройству Escape Analysis: разбираем этапы компиляции, механизм работы с памятью и разницу между размещением объектов на стеке и в куче. Отдельно рассматриваем два ключевых инварианта, лежащих в основе анализа, а также алгоритм подсчёта весов, который объясняет решения компилятора. Затем переходим к практическим методам устранения проблемы: использование gcflags, директивы //go:noescape и продвинутого приёма //go:linkname. Дополнительно показываем исходники, чтобы можно было повторить эксперимент, а в финале сравниваем результат исправленного бенчмарка с исходным и подводим итоги. Видео сочетает теорию и практику, делая сложные аспекты оптимизации Go доступными для разработчиков.
Telegram: https://t.me/igoroutine
VK: https://vk.com/igoroutine
Instagram: / igoroutine
YouTube: / @igoroutine
Таймкоды:
00:00 - Введение
00:28 - Обзор загадочной функции
02:42 - Первичный запуск бенчмарка
03:20 - Бенчмарки и обзор проблемы
05:13 - Устройство Escape Analysis. Этапы компиляции
05:59 - Устройство Escape Analysis. Устройство памяти, размещение на stack vs heap
07:29 - Устройство Escape Analysis. Два основных инварианта
10:16 - Устройство Escape Analysis. Реализация, алгоритм подсчёта весов
11:59 - Решение проблемы с помощью директив компилятора. gcflags
14:23 - Решение проблемы с помощью директив компилятора. //go:noescape
15:17 - Решение проблемы с помощью директив компилятора. //go:linkname
16:53 - Дополнительные материалы. Исходники к видео
17:05 - Результат бенчмарка исправленной версии
17:42 - Финал