Как писать параллельный код - основы
https://habr.com/ru/companies/timeweb/articles/770912/
Очень хорошая статья, в которой простым языком на простеньких примерах рассказываются основы работы с параллельным кодом:
- Зачем это нужно
- Как и почему нельзя писать параллельный код
- Какие издержки распараллеливания мы имеем (спойлер - код становится намного сложнее и опасней)
и др.
Если вы не ещё сталкивались с подобными задачами, рекомендую ознакомиться.
#article #concurrency
https://habr.com/ru/companies/timeweb/articles/770912/
Очень хорошая статья, в которой простым языком на простеньких примерах рассказываются основы работы с параллельным кодом:
- Зачем это нужно
- Как и почему нельзя писать параллельный код
- Какие издержки распараллеливания мы имеем (спойлер - код становится намного сложнее и опасней)
и др.
Если вы не ещё сталкивались с подобными задачами, рекомендую ознакомиться.
#article #concurrency
Хабр
Здоровая конкуренция в GO. Главное не перехитрить самого себя
Несколько лет назад я прочитал статью о параллелизации в GO и ничего не понял – я тогда только начинал программировать на этом языке. Но размышления автора мне очень понравились – они подкреплялись...
👍20🔥5
Как устроена память в Go
https://habr.com/ru/companies/vk/articles/776766/
На мой взгляд, устройство памяти - это очень важная тема для тех, кто хочет лучше разбираться, как Go устроен под капотом. Сама статья читается легко и интересно, мне понравилось.
#article #memory
https://habr.com/ru/companies/vk/articles/776766/
На мой взгляд, устройство памяти - это очень важная тема для тех, кто хочет лучше разбираться, как Go устроен под капотом. Сама статья читается легко и интересно, мне понравилось.
#article #memory
Хабр
Потрошим golang: как устроена память
Привет, меня зовут Стас Иванкевич, и я работаю в VK Cloud над разработкой облачных сервисов в команде Data Masters. Сервисы, запрошенные клиентами, так или иначе должны развернуться в том виде, в...
👍34🔥6❤4🤯1
Go memory ballast: How I learnt to stop worrying and love the heap
https://blog.twitch.tv/en/2019/04/10/go-memory-ballast-how-i-learnt-to-stop-worrying-and-love-the-heap/
Очень крутая статья, в которой разработчики Twitch снова борются с Garbage Collector'ом (GC). В статье есть очень крутой ликбез по GC, про некоторые его основы и нюансы.
И всё это закрепляется крутым реальным примером оптимизации, которую можно осознать благодаря понимаю этих самых тонкостей.
Будем честны, далеко не всем это пригодится в реальной работе, т.к. реальная польза будет заметна лишь при большом хайлоаде, но расширять кругозор полезно (а не расширять вредно).
Кроме того, статья поможет разобраться не столько в хайлоаде, сколько во внутреннем устройстве GC, а то ещё более ценно.
Статья написана очень круто — материал довольно сложный, глубокий, но при этом читается довольно легко и интересно.
————
Краткая суть проблемы из статьи: периодически Твич ловит внезапный рост нагрузки. Например, из-за так называемого refresh storm — это когда крупный стример перезапускает стрим, и все его зрители начинают массово обновлять страницу.
Масштабировать такое сложно, т.к. всё происходит слишком быстро, а держать достаточное количество мощностей, работающих постоянно — дорого.
Ребята решили оптимизировать нагрузку на процессор тем, что снизили частоту срабатывания GC. Как именно? Если кратко, то вот так:
Подробное обоснование, объяснение и результаты найдёте в статье🙃
Ну ладно, спойлер, вот результаты:снижение количества срабатываний GC на 99% и снижение нагрузки на CPU на 30%
Вообще, всё это выглядит как грязный хак и костыли, но авторы уже завели proposal, в котором предлагают ввести флаг, позволяющий решить данную проблему легально.
#article #english #highload #garbage_collector
https://blog.twitch.tv/en/2019/04/10/go-memory-ballast-how-i-learnt-to-stop-worrying-and-love-the-heap/
Очень крутая статья, в которой разработчики Twitch снова борются с Garbage Collector'ом (GC). В статье есть очень крутой ликбез по GC, про некоторые его основы и нюансы.
И всё это закрепляется крутым реальным примером оптимизации, которую можно осознать благодаря понимаю этих самых тонкостей.
Будем честны, далеко не всем это пригодится в реальной работе, т.к. реальная польза будет заметна лишь при большом хайлоаде, но расширять кругозор полезно (а не расширять вредно).
Кроме того, статья поможет разобраться не столько в хайлоаде, сколько во внутреннем устройстве GC, а то ещё более ценно.
Статья написана очень круто — материал довольно сложный, глубокий, но при этом читается довольно легко и интересно.
————
Краткая суть проблемы из статьи: периодически Твич ловит внезапный рост нагрузки. Например, из-за так называемого refresh storm — это когда крупный стример перезапускает стрим, и все его зрители начинают массово обновлять страницу.
Масштабировать такое сложно, т.к. всё происходит слишком быстро, а держать достаточное количество мощностей, работающих постоянно — дорого.
Ребята решили оптимизировать нагрузку на процессор тем, что снизили частоту срабатывания GC. Как именно? Если кратко, то вот так:
func main() {
// Create a large heap allocation of 10 GiB
ballast := make([]byte, 10<<30)
// Application execution continues
// ...
}
Подробное обоснование, объяснение и результаты найдёте в статье
Ну ладно, спойлер, вот результаты:
Вообще, всё это выглядит как грязный хак и костыли, но авторы уже завели proposal, в котором предлагают ввести флаг, позволяющий решить данную проблему легально.
#article #english #highload #garbage_collector
Please open Telegram to view this post
VIEW IN TELEGRAM
blog.twitch.tv
Go memory ballast: How I learnt to stop worrying and love the heap
I’m a big fan of small code changes that can have large impact. This may seem like an obvious thing to state, but let me explain:
5👍29🤯17🔥11❤10
Golang Дайджест
Анонимная сеть в 200 строк кода на Go https://habr.com/ru/articles/745256/ Отличный пост для тех, кто хочет немного погрузиться в понятие анонимных сетей и не тратить на это много времени. Всё как мы любим: краткий и интересный ликбез по теме, затем практика…
Анонимная сеть в 100 строк кода на Go
https://habr.com/ru/articles/849552/
Хорошее продолжение хорошей статьи. Суть новой статьи автор сам неплохо подытожил в самом начале:
Прошло уже более года с тех пор как я написал статью - Анонимная сеть в 200 строк кода на Go. Пересмотрев её однажды осенним вечером я понял насколько всё в ней было ужасно - начиная с самого поведения логики кода и заканчивая его избыточностью. Сев за ноутбук и потратив от силы 20 минут у меня получилось написать сеть всего в 100 строк кода, используя лишь и только стандартную библиотеку языка.
Мне понравилось❤️
#article #dyi #сети
https://habr.com/ru/articles/849552/
Хорошее продолжение хорошей статьи. Суть новой статьи автор сам неплохо подытожил в самом начале:
Прошло уже более года с тех пор как я написал статью - Анонимная сеть в 200 строк кода на Go. Пересмотрев её однажды осенним вечером я понял насколько всё в ней было ужасно - начиная с самого поведения логики кода и заканчивая его избыточностью. Сев за ноутбук и потратив от силы 20 минут у меня получилось написать сеть всего в 100 строк кода, используя лишь и только стандартную библиотеку языка.
Мне понравилось
#article #dyi #сети
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Анонимная сеть в 100 строк кода на Go
Введение Прошло уже более года с тех пор как я написал статью - Анонимная сеть в 200 строк кода на Go . Пересмотрев её однажды осенним вечером я понял насколько всё в ней было ужасно - начиная с...
Корутины: stackful vs stackless
https://habr.com/ru/articles/850970/
Статья не совсем по Go, она более общая (хотя, Go там тоже упоминается). Но тем лучше — чтобы лучше понимать, как что-то устроено в твоём языке, очень полезно поглядеть, как это сделано у соседей и сравнить.
Статья довольно короткая и написано очень хорошо, понятно, как я люблю.
#article
https://habr.com/ru/articles/850970/
Статья не совсем по Go, она более общая (хотя, Go там тоже упоминается). Но тем лучше — чтобы лучше понимать, как что-то устроено в твоём языке, очень полезно поглядеть, как это сделано у соседей и сравнить.
Статья довольно короткая и написано очень хорошо, понятно, как я люблю.
#article
Хабр
Корутины: stackful vs stackless
В этой статье я хочу объяснить разницу между stackless и stackful корутинами: чем они отличаются, какие у них плюсы и минусы, а также в общих чертах рассказать, как в некоторых...
🔥19 15👍4
Функциональные опции в Go
https://habr.com/ru/articles/842594/
🤓 Я как-то писал в своём основном канале про паттерн Functional Options — этот подход мне нравится, и я часто его вижу. А если он вам даже и не нравится, то познакомится всё равно стоит, т.к. встречать вы его наверняка тоже будете часто.
Если же хочется погрузиться глубже, то вот вам свежая подробная статья на Хабре на эту тему (не моя!). Написано очень хорошо, мне понравилось — читается легко и приятно.
————
Предвосхищая ваши комментарии, про Configurable Object я тоже писал🤓
#article
https://habr.com/ru/articles/842594/
Если же хочется погрузиться глубже, то вот вам свежая подробная статья на Хабре на эту тему (не моя!). Написано очень хорошо, мне понравилось — читается легко и приятно.
————
Предвосхищая ваши комментарии, про Configurable Object я тоже писал
#article
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Функциональные опции в Go
Функциональные опции в Go. Комикс required? Optional! Салют! Меня зовут Дима, я руковожу командой разработки ядра цифровой медицины в Республике Узбекистан. Сегодня я хочу поделиться своими знаниями о...
👍13🔥7
Golang Дайджест
Функциональные опции в Go https://habr.com/ru/articles/842594/ 🤓 Я как-то писал в своём основном канале про паттерн Functional Options — этот подход мне нравится, и я часто его вижу. А если он вам даже и не нравится, то познакомится всё равно стоит, т.к.…
Паттерны многопоточности в Go
https://habr.com/ru/articles/852556/
Ещё одна хорошая статья от того же автора. Хорошая тема — одно дело понимать, как работают горутины, другое — уметь ими правильно пользоваться в разных ситуациях. Благо, за нас уже придумали хорошие решения различных типовых задач и оформили это в виде паттернов. И эта статья — очень неплохой способ с ними познакомиться.
————
UPD: автор статьи здесь также присутствует, можете обращаться к нему в комментариях к этому посту:
#article
https://habr.com/ru/articles/852556/
Ещё одна хорошая статья от того же автора. Хорошая тема — одно дело понимать, как работают горутины, другое — уметь ими правильно пользоваться в разных ситуациях. Благо, за нас уже придумали хорошие решения различных типовых задач и оформили это в виде паттернов. И эта статья — очень неплохой способ с ними познакомиться.
————
UPD: автор статьи здесь также присутствует, можете обращаться к нему в комментариях к этому посту:
Если есть еще какие-то паттерны о которых я забыл, напишите. Дополню статью
#article
Хабр
Паттерны многопоточности в Go
Привет! Ты читаешь эту статью, а значит интересуешься Go и хочешь прокачать свои навыки в многопоточности. Наверняка ты уже знаком и активно пользуешь примитивы многопоточного программирования...
👍31🔥16 5
Готовим слайсы в Go: подробно о динамических массивах, строчках и ускорении
https://habr.com/ru/companies/yadro/articles/874480/
Ещё одна неплохая и очень подробная статья про слайсы с глубоким погружением.
Что разобрано:
- Внутреннее устройство слайсов и как растёт их capacity. Также затронут интересный момент про округление вместимости из-за особенностей хранения объектов в хипе, про который редко пишут
- Разные способы создания слайсов и когда какой вариант лучше (пустой слайс,
- Передача слайсов в функции: по значению vs по указателю
- Работа со строками, конкатенация и оптимизации компилятора
- Подробный разбор
- Тонкости копирования при
- Использование
- Сравнение разных способов конкатенации строк на больших и маленьких объёмах данных
И много ещё интересного.
Особенно порадовали бенчмарки в конце с неожиданными результатами — strings.Join() может работать эффективнее чем bytes.Buffer.
В общем, рекомендую к прочтению👾
#performance #slices #strings #article
https://habr.com/ru/companies/yadro/articles/874480/
Ещё одна неплохая и очень подробная статья про слайсы с глубоким погружением.
Что разобрано:
- Внутреннее устройство слайсов и как растёт их capacity. Также затронут интересный момент про округление вместимости из-за особенностей хранения объектов в хипе, про который редко пишут
- Разные способы создания слайсов и когда какой вариант лучше (пустой слайс,
make(len)
, make(0, cap)
и т.д.).- Передача слайсов в функции: по значению vs по указателю
- Работа со строками, конкатенация и оптимизации компилятора
- Подробный разбор
bytes.Buffer
vs strings.Builder
и их особенностей- Тонкости копирования при
[]byte → string
и обратно- Использование
sync.Pool
для переиспользования памяти — как не забыть "вернуть" объект в пул и почему со strings.Builder
это не работает- Сравнение разных способов конкатенации строк на больших и маленьких объёмах данных
И много ещё интересного.
Особенно порадовали бенчмарки в конце с неожиданными результатами — strings.Join() может работать эффективнее чем bytes.Buffer.
В общем, рекомендую к прочтению
#performance #slices #strings #article
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Готовим слайсы в Go: подробно о динамических массивах, строчках и ускорении
Привет, Хабр! Меня зовут Владислав Белогрудов, я работаю в команде разработки интерфейсов и сервисов управления в YADRO. Мой текущий проект — информационная система на Go. В рамках проекта я...
🔥21👍11❤9
Golang Дайджест
Swiss Tables новая реализация map — Go 1.24 https://go.dev/blog/swisstable Перевод Как вы наверняка уже знаете, в Go 1.24 встроенная реализация map была полностью переработана и теперь основана на Swiss Table. В этой статье Michael Pratt (один из авторов…
https://habr.com/ru/companies/simbirsoft/articles/899180/
Ещё один неплохой подробный разбор новой мапы в Go. Более простым языком и с цветными картинками
#article
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Go 1.24: принципы работы и преимущества обновленной map
В феврале 2025 года разработчики Go выпустили версию 1.24, в которой значительно улучшили производительность языка. Одно из ключевых изменений коснулось структуры map — встроенного типа данных,...
❤16🔥6👍1
Уровни оптимизации кода на Go: начинай с главного
https://habr.com/ru/companies/vk/articles/902820/
Автор разделяет оптимизацию на три уровня:
1. Макровзаимодействия — HTTP / gRPC / SQL, старт процессов (десятки‑сотни миллисекунд).
2. Микровзаимодействия — syscalls, WebSocket внутри открытого соединения (микросекунды).
3. Инструкции CPU — циклы, копирование памяти, сортировки (наносекунды).
Главный тезис: оптимизацию нужно начинать с первых уровней. То есть, сначала устраняем крупные проблемы, а потом уже думаем об аллокациях.
Цитата:
Статья короткая, но неплохо расставляет приоритеты. Рекомендую, особенно джунам, которые любят начинать оптимизацию с
Ну и, к слову про оптимизацию, не забывайте классику
#article
https://habr.com/ru/companies/vk/articles/902820/
Автор разделяет оптимизацию на три уровня:
1. Макровзаимодействия — HTTP / gRPC / SQL, старт процессов (десятки‑сотни миллисекунд).
2. Микровзаимодействия — syscalls, WebSocket внутри открытого соединения (микросекунды).
3. Инструкции CPU — циклы, копирование памяти, сортировки (наносекунды).
Главный тезис: оптимизацию нужно начинать с первых уровней. То есть, сначала устраняем крупные проблемы, а потом уже думаем об аллокациях.
Цитата:
Оптимизируя код, действуйте в следующей последовательности: сначала оптимизируйте крупные операции, затем переходите к более мелким. Начните с удаления каких-то операций, потом уменьшайте сложность, и только в конце — распараллеливайте. Так вы потратите меньше времени на увеличение скорости работы вашего приложения. Не придется запускать профилировщик на каждый чих, потому что можно просто посмотреть и сразу понять, что надо делать.
Статья короткая, но неплохо расставляет приоритеты. Рекомендую, особенно джунам, которые любят начинать оптимизацию с
make(slice, 0, cap)
Ну и, к слову про оптимизацию, не забывайте классику
#article
Хабр
Как оптимизировать код на Go? Раскладываем по полочкам
Привет, Хабр! Меня зовут Дмитрий Гурьянов, я руковожу командой Manuls в VK HR Tek (система ведения кадрового электронного документооборота). Сегодня расскажу о нюансах оптимизации на разных уровнях...
🔥36👍12❤4
Retry в Go: От граблей к дзену отказоустойчивости
https://habr.com/ru/articles/903576/
Автор затронул хорошую тему — ретраи крайне важная штука, но многие недооценивают их сложность.
Скажем, если вы не знакомы с понятиями Exponential Backoff и Jitter, то точно стоит прочитать. Также разобраны и более глубокие моменты.
#article
https://habr.com/ru/articles/903576/
Автор затронул хорошую тему — ретраи крайне важная штука, но многие недооценивают их сложность.
Скажем, если вы не знакомы с понятиями Exponential Backoff и Jitter, то точно стоит прочитать. Также разобраны и более глубокие моменты.
#article
Хабр
Retry в Go: От граблей к дзену отказоустойчивости
В мире распределенных систем и микросервисов сетевые сбои, временная недоступность сервисов или всплески нагрузки — не исключение, а скорее правило. Отказ одного компонента не должен каскадом обрушить...
👍24🔥13
Оптимизация конкурентных приложений в Go
https://habr.com/ru/companies/vktech/articles/904046/
Хорошая статья про конкурентность в Go. Написана довольно хорошо и покрывает множество важных вопросов: когда нужна конкурентность, как проектировать микроархитектуру, на какие паттерны опираться, как тестировать свои решения.
Цитата:
#article
https://habr.com/ru/companies/vktech/articles/904046/
Хорошая статья про конкурентность в Go. Написана довольно хорошо и покрывает множество важных вопросов: когда нужна конкурентность, как проектировать микроархитектуру, на какие паттерны опираться, как тестировать свои решения.
Цитата:
Мы пройдем путь от атомарных блоков до продакшен-архитектур, дополнительно отталкиваясь от идей Роба Пайка и практических кейсов, — чтобы результат был не просто рабочим, а надежным и удобным в поддержке.
#article
Хабр
Оптимизация конкурентных приложений в Go
Эпиграф в стиле А.П. Чехова по следам оригинального выступления Иван Семёныч Троицкий, программист сорока лет, застенчивый и робкий, от природы больше склонный к одиночеству, чем к публичным...
👍19🔥12❤1
Писать или не писать простой код?
Предлагаю вашему вниманиюдве три статьи:
1. Пиши простой код
2. Не пиши простой код
3. Просто пиши код
Интересная и горячая дискуссия, которая нас с вами тоже касается, не пропустите.
От комментариев я пока воздержусь, но, возможно, чуть позже поделюсь и своим мнением по итогам🌚
#article #discussion
Предлагаю вашему вниманию
1. Пиши простой код
2. Не пиши простой код
3. Просто пиши код
Интересная и горячая дискуссия, которая нас с вами тоже касается, не пропустите.
От комментариев я пока воздержусь, но, возможно, чуть позже поделюсь и своим мнением по итогам
#article #discussion
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍8🤔4🤯1
- Перевод
- Оригинал
Фундаментальная статья, которая погружает в самые недра форматов изображений. Автор не просто описывает JPEG, PNG и GIF, а детально разбирает их внутреннее устройство, принципы сжатия. В общем, всё как мы любим.
Что именно разбирается:
- Основы: Краткий ликбез по пикселям, цветовым моделям RGB и RGBA.
- GIF: Подробно о палитре, анимации и о том, как стандартная библиотека Go (image/gif) кодирует эти изображения. Есть даже пример создания простого анимированного GIF на Go.
- PNG: Разбор структуры чанков (IHDR, IDAT, IEND), использование DEFLATE для сжатия, и очень интересный раздел о техниках фильтрации (Sub, Up, Average, Paeth), которые помогают улучшить степень сжатия. Автор также ссылается на реализацию этих фильтров в Go.
- JPEG: Глубокое погружение в механизмы этого формата
Статья довольно объемная, но читается интересно и неплохо расширяет кругозор.
Бонусом идут примеры кода на Go
#article #deep_dive
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25👍8❤4
Перешел с Kotlin на Go и написал AI-Chat
https://habr.com/ru/articles/910122/
Опытный Kotlin-разработчик пишет о том, как он знакомился с Go. Интересный взгляд на наш язык со стороны и возможность сравнить его с другой технологией.
#article
https://habr.com/ru/articles/910122/
Опытный Kotlin-разработчик пишет о том, как он знакомился с Go. Интересный взгляд на наш язык со стороны и возможность сравнить его с другой технологией.
#article
Хабр
Как я ушёл с Kotlin (Spring Boot) на Go (Gin) и сделал AI-чат с WebSocket и GPT-4
Меня зовут Артём, я занимаюсь коммерческой разработкой с 2019 года. Последние несколько лет я активно использовал Spring Boot для создания backend-сервисов на Java и Kotlin. Но в какой-то момент...
👍21
Самый.. детальный гайд по планировщику
https://nghiant3223.github.io/2025/04/15/go-scheduler.html
Случайно наткнулся на ещё одну статью про планировщик Go. Я бы не стал делиться подобным в очередной раз (тем более, уже есть шедевр на все времена👍 ), но этот автор смог меня удивить — такой детальной проработки на эту тему я пока не встречал.
К тому же, статья довольно свежая: Apr 15, 2025
В общем, рекомендую как следующий этап после этого ролика / статьи — они больше подходят для первого ознакомления с темой, а здесь более глубокое погружение с огромным количеством деталей.
#article #english
https://nghiant3223.github.io/2025/04/15/go-scheduler.html
Случайно наткнулся на ещё одну статью про планировщик Go. Я бы не стал делиться подобным в очередной раз (тем более, уже есть шедевр на все времена
К тому же, статья довольно свежая: Apr 15, 2025
В общем, рекомендую как следующий этап после этого ролика / статьи — они больше подходят для первого ознакомления с темой, а здесь более глубокое погружение с огромным количеством деталей.
#article #english
Please open Telegram to view this post
VIEW IN TELEGRAM
Melatoni
Go Scheduler
↑ ↓
🔥56👍12❤4🤔1
Регламент для работы с ошибками в Go
https://habr.com/ru/companies/oleg-bunin/articles/913096/
Ну что, готовы в очередной раз обсудить работу с ошибками?😩
#article
https://habr.com/ru/companies/oleg-bunin/articles/913096/
Ну что, готовы в очередной раз обсудить работу с ошибками?
#article
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Регламент для работы с ошибками в Go
Ошибки в приложениях неизбежны, но мы можем их смягчить и упростить отладку. Но как выбрать правильный способ обработки? В этой статье предлагаю разобраться, как организовать работу с ошибками в Go...
🤔15❤2👍1
Как устроены новые мапы в Go 1.24
https://habr.com/ru/companies/ru_mts/articles/915880/
Ещё одна неплохая статья про внутреннее устройство Swiss Map
#article #swissmap
https://habr.com/ru/companies/ru_mts/articles/915880/
Ещё одна неплохая статья про внутреннее устройство Swiss Map
#article #swissmap
Хабр
Как устроены новые мапы в Go 1.24
Привет, Хабр! Меня зовут Владимир Марунин, я ведущий разработчик в команде Clatch. Сегодня расскажу о новых мапах в Go 1.24: разберем изменения, посмотрим, что было и что стало. О мапах часто...
👍13🔥6❤2