
Утечка горутин в Go: где они прячутся и как найти
Горутина висит, пока не завершится или не вернётся из функции. Забытый канал, отменённый запрос без остановки фоновой работы — и число горутин растёт линейно с трафиком, пока сервис не съест память.

Горутина висит, пока не завершится или не вернётся из функции. Забытый канал, отменённый запрос без остановки фоновой работы — и число горутин растёт линейно с трафиком, пока сервис не съест память.

Как namespace в C++ спасает от конфликтов имён при линковке, почему using namespace std в заголовках — беда, и как всё это устроено в стандартах C++17 и C++20.

Сервис на Go рос по RSS с 200 МБ до 3 ГБ за сутки и падал по OOM. Разбираем, как pprof heap показал реальный источник и чем отличается «утечка» в Go от классической.

Сервис держит 40k RPS, но p99 плавает до 200 мс на ровном месте. Разбираем, как трассировка планировщика Go показывает, где горутины ждут вместо работы, и что с этим делать.

Профиль pprof показывает, куда ушло процессорное время, но легко читается неправильно. Разбираем, на что смотреть в профиле и какие выводы из него делать нельзя.

Каждое присваивание int в interface{} может обернуться аллокацией в куче. На горячем пути это превращается в миллионы объектов и рост нагрузки на GC. Разбираем, когда Go боксирует значения и как это увидеть.

За полчаса вы разберётесь, как объявлять пространства имён, разносить объявления по заголовкам и не ловить конфликты при слиянии двух библиотек.

Как выглядел перенос обработчика очередей с Python 3.11 на Go 1.22: что реально ускорилось, где потерялись месяцы и почему часть кода осталась на Python.

За полчаса вы объявите статические поля и методы, правильно их определите вне класса и избежите ошибки линковщика undefined reference. Примеры для C++17 и новее.

Дженерики в Go 1.18+ — это не шаблоны C++ и не стирание типов как в Java. Разбираем механизм GC-shape stenciling, цену интерфейсов внутри дженериков и то, где обобщения реально экономят, а где ломают производительность.

Сервис на Go начал тратить 30% CPU в GC под нагрузкой без роста трафика. Причина — упаковка значений в interface{} на горячем пути. Разбираем механизм, замеры и где подход ломается.

Сервис тратил четверть CPU на сборку мусора. Разбираю, как escape-анализ, sync.Pool и предвыделение срезов срезали аллокации в горячем пути и что показал pprof до и после.