Как устроена память в 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 Tour на стероидах от ArdanLabs
https://www.ardanlabs.com/blog/2024/01/ultimate-go-tour.html
William Kennedy, известный нам по крутым гайдам по внутренностям Go, решил, что официальный Go Tour недостаточно хорош, и предлагает нам свою версию.
Что не нравилось:
- Официальный Тур не является всеобъемлющим как по количеству примеров, так и по содержанию, объясняющему эти примеры
- Содержание практически мгновенно переходит от новичка к эксперту
Вильям поколдовал и получилось это: tour.ardanlabs.com
Лучше оно или хуже - решать вам. Но оно точно стоит внимания.
Возможно, один из самых крутых аспектов этого нового тура заключается в том, что он не контролируется Google. Это дает проекту гибкость, позволяющую вовлечь в него сообщество.
#ardanlabs #go_tour
https://www.ardanlabs.com/blog/2024/01/ultimate-go-tour.html
William Kennedy, известный нам по крутым гайдам по внутренностям Go, решил, что официальный Go Tour недостаточно хорош, и предлагает нам свою версию.
Что не нравилось:
- Официальный Тур не является всеобъемлющим как по количеству примеров, так и по содержанию, объясняющему эти примеры
- Содержание практически мгновенно переходит от новичка к эксперту
Вильям поколдовал и получилось это: tour.ardanlabs.com
Лучше оно или хуже - решать вам. Но оно точно стоит внимания.
Возможно, один из самых крутых аспектов этого нового тура заключается в том, что он не контролируется Google. Это дает проекту гибкость, позволяющую вовлечь в него сообщество.
#ardanlabs #go_tour
Ardan Labs
Ultimate Go Tour
Ardan Labs is trusted by small startups and Fortune 500 companies to train their engineers and develop business software solutions and applications.
🔥41👍9❤7
Forwarded from Go Update
🎉 Состоялся релиз Go 1.22
Как-то буднично и без предварительных фанфар состоялся релиз новой версии языка. Изменений много, постараюсь остановится лишь на самых значимых:
— Расширение синтаксиса циклов for. Теперь можно писать
Вместо
Изменение приятное, уменьшающее число когнитивной нагрузки. Само изменение шло в довесок к итераторам, которые отложили до Go 1.23 (но которые можно попробовать уже сейчас).
— Изменение принципов создания переменных внутри объявления циклов. Об этом я писал вот тут, но если в кратце больше не нужна конструкция вида
— Итераторы доступны в экспериментальном режиме. Включить и поиграться можно через переменную окружения
—
— Переделали trace – и пакет и UI.
—
— Первый v2 пакет
— PGO (оптимизация использующая данные профилировщика) теперь генерирует еще более быстрый код. Обещают от 2% др 14% прироста производительности при использовании PGO.
— Оптимизации "встраивание функций" и "девиртуализатор" теперь работают совместно, что позволяет выполнять один после другого и обратно. Этого очень просили пользователи функций криптографических пакетов которые возвращают интерфейсы.
— Оптимизацию "встраивание функций" сделали еще более умной - теперь она пытается отработать внутри циклов и других горячих местах, и наоборот пытается не инлайнить в коде обработки паник. Но пока все это тоже в экспериментальном режиме. Попробовать можно через
— Из лично приятного: в пакет
На мой взгляд релиз в целом приятный, но половинчатый: многое из действительно интересных вещей скрыты за флагом
Полный список изменений как всегда тут.
Как-то буднично и без предварительных фанфар состоялся релиз новой версии языка. Изменений много, постараюсь остановится лишь на самых значимых:
— Расширение синтаксиса циклов for. Теперь можно писать
for i := range 10 {
println(i)
}
Вместо
for i := 0; i < 10; i++ {
println(i)
}
Изменение приятное, уменьшающее число когнитивной нагрузки. Само изменение шло в довесок к итераторам, которые отложили до Go 1.23 (но которые можно попробовать уже сейчас).
— Изменение принципов создания переменных внутри объявления циклов. Об этом я писал вот тут, но если в кратце больше не нужна конструкция вида
tt := tt
внутри циклов.— Итераторы доступны в экспериментальном режиме. Включить и поиграться можно через переменную окружения
GOEXPERIMENT=rangefunc
. Можно установить через go env -w GOEXPERIMENT=rangefunc
если не хочется каждый раз возится. В комплекте так-же идет пакет iter
который позволяет создавать pull итераторы из push. Почитать про все это от разработчиков языка можно тут.—
go test -cover
теперь корректно выводит 0% покрытия для пакетов где нет тестов, но есть исполняемый код. Для пакетов где нет go файлов или они содержат только структуры выводит старое [no test files]
.— Переделали trace – и пакет и UI.
—
net/http
роутер теперь поддерживает указание метода и паттерны. Про это расширение роутера было много статей и блогов, поэтому тут будет просто упоминание.— Первый v2 пакет
math/rand/v2
. Заменили Mitchell & Reeds LFSR
генератор rand.Source
случайных чисел на более современный и криптографически стойкий ChaCha8
. А сие значит, что его можно использовать для криптографических операций. Плюс он быстрее и жрет меньше памяти. Так-же есть PCG
генератор, который не криптографически стойкий, но еще быстрее. Кроме этого пакет получил дополнительные методы (в том числе дженерик функция rand.N
для работы с семейством int
типов, например time.Duration
).— PGO (оптимизация использующая данные профилировщика) теперь генерирует еще более быстрый код. Обещают от 2% др 14% прироста производительности при использовании PGO.
— Оптимизации "встраивание функций" и "девиртуализатор" теперь работают совместно, что позволяет выполнять один после другого и обратно. Этого очень просили пользователи функций криптографических пакетов которые возвращают интерфейсы.
— Оптимизацию "встраивание функций" сделали еще более умной - теперь она пытается отработать внутри циклов и других горячих местах, и наоборот пытается не инлайнить в коде обработки паник. Но пока все это тоже в экспериментальном режиме. Попробовать можно через
GOEXPERIMENT=newinliner
. Почитать тут.— Из лично приятного: в пакет
slices
добралась функция Concat
для соединения произвольного числа слайсов. Больше не нужно городить цепочку append
.На мой взгляд релиз в целом приятный, но половинчатый: многое из действительно интересных вещей скрыты за флагом
GOEXPERIMENT
, а часть вообще осталась ждать Go 1.23. Тем не менее обновится стоит, хотя-бы ради нового синтаксиса циклов for.Полный список изменений как всегда тут.
Telegram
Go Update
🆒 Fixing For Loops in Go 1.22
Рассказывая про счастливое далекое будущее, я часто забываю рассказать про хорошее (почти) настоящее. Но перед тем как начать, я задам вопрос: а что выведет следующая программа?
package main
import "fmt"
func main() {
var…
Рассказывая про счастливое далекое будущее, я часто забываю рассказать про хорошее (почти) настоящее. Но перед тем как начать, я задам вопрос: а что выведет следующая программа?
package main
import "fmt"
func main() {
var…
🔥55👍20❤11
routegroup - легковесная обёртка для группировки и интеграции middleware в
https://github.com/go-pkgz/routegroup
Автор библиотеки: Umputun, один из ведущих подкаста Радио-Т
Описание его словами:
Оригинальный пост: https://www.tgoop.com/daily_geek_news/218
#library #http #mux
http.ServeMux
https://github.com/go-pkgz/routegroup
Автор библиотеки: Umputun, один из ведущих подкаста Радио-Т
Описание его словами:
Смысл этой микро-библиотеки лично для меня в том, чтоб убрать ненужную теперь зависимость на Chi в моих проектах, но не пострадать при этом. Chi мне служил верой и правдой много лет, хотя наши с ним (а точнее с его автором) отношения не всегда были ровными. Однако, после того как в 1.22 завезли улучшения раутинга, почти все, чего мне не хватало в стандартном муксе там появилось. Единственно то, чего не хватило это библиотека добавила, а именно группы раутов с ассоциированными мидлеваре.
Я ее писал с двумя целями в голове - добавить только это и ничего более, и быть полностью совместимым со стандартной библиотекой.
Оригинальный пост: https://www.tgoop.com/daily_geek_news/218
#library #http #mux
GitHub
GitHub - go-pkgz/routegroup: Lightweight library for route grouping and middleware integration with the standard http.ServeMux
Lightweight library for route grouping and middleware integration with the standard http.ServeMux - go-pkgz/routegroup
🔥23👍5 2
Пишем RPG на Go - серия статей
0) https://habr.com/ru/articles/791192/
0.5) https://habr.com/ru/articles/799497/
Искандер активно продвигает GameDev на Go, и вот его очередной проект - обучающая серия статей по написанию RPG на Ebitengine.
Пока написаны только две вступительные статьи, остальное в процессе.
Напомню, что у Искандера уже есть готовая игра - Roboden, написанная на Go, которая уже добралась до Steam и даже до Steamdeck.
————
Если вам интересен подобный формат, предлагаю поддержать автора, чтобы у него точно была мотивация довести проект до конца👾
#guide #gamedev #quasilyte
0) https://habr.com/ru/articles/791192/
0.5) https://habr.com/ru/articles/799497/
Искандер активно продвигает GameDev на Go, и вот его очередной проект - обучающая серия статей по написанию RPG на Ebitengine.
Пока написаны только две вступительные статьи, остальное в процессе.
Напомню, что у Искандера уже есть готовая игра - Roboden, написанная на Go, которая уже добралась до Steam и даже до Steamdeck.
————
Если вам интересен подобный формат, предлагаю поддержать автора, чтобы у него точно была мотивация довести проект до конца
#guide #gamedev #quasilyte
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Делаем RPG на Go: часть 0
Один из самых частых вопросов в нашем сообществе разработке игр на Go — это с чего начать. В этой серии статей мы будем изучать движок Ebitengine и создадим RPG в процессе. Вступление Что от вас...
🔥34 11🤯7👍2
Сторисы выкладывать тут не буду, но если хотите гоферов в реакты под постами, вы знаете за кого голосовать 👾
https://www.tgoop.com/boost/golang_digest
Можно в полдень 😉
————
UPD 2: Два гофера есть 👾 🤡
https://www.tgoop.com/boost/golang_digest
————
Please open Telegram to view this post
VIEW IN TELEGRAM
Как начать разрабатывать игры на Go
https://www.quasilyte.dev/ebiten/ru/
Искандер написал подробный гайд для людей, которые делают свои первые шаги в геймдеве на Go:
- Развенчание популярных мифов
- Про Ebitengine
- Ресурсы для обучения
- Важные библиотеки
и др.
От автора:
#guide #gamedev #quasilyte
https://www.quasilyte.dev/ebiten/ru/
Искандер написал подробный гайд для людей, которые делают свои первые шаги в геймдеве на Go:
- Развенчание популярных мифов
- Про Ebitengine
- Ресурсы для обучения
- Важные библиотеки
и др.
От автора:
Тебе хочется создавать игры на Go? Ebitengine - отличный вариант.
Этот документ был создан чтобы упростить твоё путешествие.
...
tl;dr: Go - подходящий язык, Ebitengine - неплохой игровой движок, сообщество - живое и расширяется
#guide #gamedev #quasilyte
Красивое решение для борьбы с ботами на серверах
Ещё один интересный пост от Daily Geek News:
https://www.tgoop.com/daily_geek_news/230
Речь про endlessh-go
- решение для защиты серверов, работающих с SSH. На самом деле, это просто реализация Endlessh на Go с добавлением метрик и дашборда в Графане.
Для тех, кто не очень понимает автора оригинально поста, давайте разберемся о чем речь:
- Тарпит (Tar pit) - технология безопасности, предназначенная для замедления атакующего, путем увеличения времени ответа сервера. Это заставляет сканирующие боты или атакующие инструменты тратить гораздо больше времени на попытку подключения к серверу, что затрудняет атаку. Вот более подробная статья на эту тему.
- Ханипот (Honeypot) - система безопасности, представляющая собой ложную цель для атакующих. Она преднамеренно содержит уязвимости для привлечения хакеров, позволяя администраторам отслеживать попытки несанкционированного доступа и анализировать методы атаки.
Хорошую статью на эту тему на нашел. Если знаете, делитесь в комментариях, а пока вот такая (не читал, не ручаюсь что хорошая)
- Экспортирование данных в Графану позволяет наглядно отслеживать активность вокруг сервера SSH, строить на этом какую-то аналитку
#project #cybersecurity
Ещё один интересный пост от Daily Geek News:
https://www.tgoop.com/daily_geek_news/230
Речь про endlessh-go
- решение для защиты серверов, работающих с SSH. На самом деле, это просто реализация Endlessh на Go с добавлением метрик и дашборда в Графане.
Для тех, кто не очень понимает автора оригинально поста, давайте разберемся о чем речь:
- Тарпит (Tar pit) - технология безопасности, предназначенная для замедления атакующего, путем увеличения времени ответа сервера. Это заставляет сканирующие боты или атакующие инструменты тратить гораздо больше времени на попытку подключения к серверу, что затрудняет атаку. Вот более подробная статья на эту тему.
- Ханипот (Honeypot) - система безопасности, представляющая собой ложную цель для атакующих. Она преднамеренно содержит уязвимости для привлечения хакеров, позволяя администраторам отслеживать попытки несанкционированного доступа и анализировать методы атаки.
Хорошую статью на эту тему на нашел. Если знаете, делитесь в комментариях, а пока вот такая (не читал, не ручаюсь что хорошая)
- Экспортирование данных в Графану позволяет наглядно отслеживать активность вокруг сервера SSH, строить на этом какую-то аналитку
#project #cybersecurity
Telegram
Daily Geek News
Невероятное красивое решение, в буквальном смысле: тарпит и ханипот для ssh, умеющий экспортировать красивые данные для графиков в графане. Теперь все те боты, которые ходят по сети и пытаются попасть на ваш ssh сервер будут тормозить, а вы их будете автоматом…
Очередная дискуссия про обработку ошибок в Go
https://habr.com/ru/companies/karuna/articles/830346/
Пост написан по мотивам поста этого же автора в его Telegram-канале.
В целом с автором я согласен, но, на мой взгляд, в статье мало нового, и повторяются плюс-минус те же тезисы, которые мы слышим много лет. При этом, статья в очередной раз привлекла внимание сообщества и вызвала активное обсуждение в комментариях.
Если ты новичок, можешь погрузиться в тему - что же у нас не так с обработкой ошибок. А если опытный разработчик, можешь в очередной раз присоединиться к дискуссии и почитать proposals🍾
————
Сам я выкручиваюсь обычно так:
Не идеально, но просто и понятно.
Надеюсь, что когда-нибудь авторы предложат нам что-то более удобное.
#error_handling
https://habr.com/ru/companies/karuna/articles/830346/
Пост написан по мотивам поста этого же автора в его Telegram-канале.
В целом с автором я согласен, но, на мой взгляд, в статье мало нового, и повторяются плюс-минус те же тезисы, которые мы слышим много лет. При этом, статья в очередной раз привлекла внимание сообщества и вызвала активное обсуждение в комментариях.
Если ты новичок, можешь погрузиться в тему - что же у нас не так с обработкой ошибок. А если опытный разработчик, можешь в очередной раз присоединиться к дискуссии и почитать proposals
————
Сам я выкручиваюсь обычно так:
func myFunc() error {
const op = "mypackage.myFunc"
// ...
if err != nil {
return fmt.Errorf("%s: %w", op, err)
}
Не идеально, но просто и понятно.
Надеюсь, что когда-нибудь авторы предложат нам что-то более удобное.
#error_handling
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Ошибки в языке Go — это большая ошибка
// гофер пытается найти логику среди обработки ошибок +-------+-------+-------+-------+-------+-------+ | | err | | err | | err | | ,_,,, | | | | | | ( ◉ _ ◉) | | | | | | /) (\ | | | | | ""...
Forwarded from Go Update
🎉 Вышел Go 1.23! 🎉
Ключевые нововведения:
• Итераторы — больше вот тут. TLDR: теперь можно делать
• Opt-in телеметрия — опциональный сбор метрик и периодическая отправка их. Детальный док вот тут. TLDR: эта вещь позволяет понять как часто и каким командами пользуются Go разработчики, какие флаги они применяют и как часто люди сталкиваются с ошибками компилятора. Статистика обезличенная, а сам формат полностью в открытом доступе. Важно! Сбор по умолчанию включен, но никуда не отсылает метрики. Включить отправку можно с помощью команды
• Директива
• Больше нельзя обратится к неэкспортируемым именам в стандартной библиотеке с помощью
•
• Пакет unique. Про него тоже писал раньше.
• Много функции для итераторов.
Полное описание релиза вот тут.
Ключевые нововведения:
• Итераторы — больше вот тут. TLDR: теперь можно делать
range
по таким функциям:
func(func() bool)
func(func(K) bool)
func(func(K, V) bool)
• Opt-in телеметрия — опциональный сбор метрик и периодическая отправка их. Детальный док вот тут. TLDR: эта вещь позволяет понять как часто и каким командами пользуются Go разработчики, какие флаги они применяют и как часто люди сталкиваются с ошибками компилятора. Статистика обезличенная, а сам формат полностью в открытом доступе. Важно! Сбор по умолчанию включен, но никуда не отсылает метрики. Включить отправку можно с помощью команды
go telemetry on
. Выключить полностью можно с помощью команды go telemetry off
.• Директива
godebug
в go.mod
файлах.• Больше нельзя обратится к неэкспортируемым именам в стандартной библиотеке с помощью
//go:linkname
(за исключением ряда функций).•
time.Timer
и time.Ticker
больше не нужно останавливать для того, что-бы сборщик мусора смог их собрать. Во вторых, канал который ассоциирован с этими таймерами теперь небуферизированный и гарантирует, что в канале нет данных после остановки. Другими словами, после остановки time.Timer
и time.Ticker
больше не требуется пытаться вычитать данные из канала, на случай если таймер уже истек и послал данные в канал. Включается только если go.mod
содержит go 1.23.0
и выше. Заметку про это обновление можно прочитать вот тут.• Пакет unique. Про него тоже писал раньше.
• Много функции для итераторов.
Полное описание релиза вот тут.
go.dev
Go 1.23 Release Notes - The Go Programming Language
🔥41❤8👍7
Go Update
🎉 Вышел Go 1.23! 🎉 Ключевые нововведения: • Итераторы — больше вот тут. TLDR: теперь можно делать range по таким функциям: func(func() bool) func(func(K) bool) func(func(K, V) bool) • Opt-in телеметрия — опциональный сбор метрик и периодическая отправка…
Если уж читать краткую выжимку самого интересного, то лучше у Димы (репост из его канала). Он всегда пристально следит за развитием языка, глубоко погружен в тему.
В общем, крайне рекомендую. Не реклама❤️
В общем, крайне рекомендую. Не реклама
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Thank Go! (Anton Zhiyanov)
Go 1.23
Тут вышел Go 1.23, ну а мы с вами успели разобрать основные изменения заранее:
— Итераторы
— Таймеры
— Уникальные значения
— Скопировать каталог
— Куки
Все вместе с интерактивными примерами:
https://antonz.org/go-1-23
Тут вышел Go 1.23, ну а мы с вами успели разобрать основные изменения заранее:
— Итераторы
— Таймеры
— Уникальные значения
— Скопировать каталог
— Куки
Все вместе с интерактивными примерами:
https://antonz.org/go-1-23
👍14❤2 1
Thank Go!
Go 1.23 Тут вышел Go 1.23, ну а мы с вами успели разобрать основные изменения заранее: — Итераторы — Таймеры — Уникальные значения — Скопировать каталог — Куки Все вместе с интерактивными примерами: https://antonz.org/go-1-23
Тут тоже интересно рассказано про новое в 1.23, вдруг кому-то больше понравится в таком формате.
👍8 2
Range Over Function Types
https://go.dev/blog/range-functions
Подробный пост в официальном блоге разработчиков Go о том, зачем добавили итераторы в Go 1.23, что они из себя представляют, как их использовать, приводят примеры.
#go_official #go_1_23
https://go.dev/blog/range-functions
Подробный пост в официальном блоге разработчиков Go о том, зачем добавили итераторы в Go 1.23, что они из себя представляют, как их использовать, приводят примеры.
#go_official #go_1_23
go.dev
Range Over Function Types - The Go Programming Language
A description of range over function types, a new feature in Go 1.23.
8🔥11👍7 2
Паттерн Functional Options
Это очень популярный подход, который я встречал во всех компаниях, в которых довелось писать код на Go.
В этом посте я подробно описал суть проблемы, которую он решает. А в этом разобрал суть паттерна и его реализацию.
#pattern #guide
Это очень популярный подход, который я встречал во всех компаниях, в которых довелось писать код на Go.
В этом посте я подробно описал суть проблемы, которую он решает. А в этом разобрал суть паттерна и его реализацию.
#pattern #guide
9 24🔥10❤3👍2
unique - новый пакет в стандартной библиотеке Go 1.23
https://go.dev/blog/unique
Ещё один интересный пост в официальном блоге авторов Go с подробным объяснением очередной интересной новинки в версии 1.23
Пакет unique упрощает работу с дубликатами. То есть, он позволяет выполнять дедупликацию таким хитрым образом, чтобы все ссылки указывали на единственную, уникальную копию. При этом пакет эффективно управляет этими копиями под капотом.
Возможно, вы уже встречали этот подход под названием Interning.
Автор статьи рассказывает и показывает, как это работает, и почему это полезно.
#go_official #go_1_23
https://go.dev/blog/unique
Ещё один интересный пост в официальном блоге авторов Go с подробным объяснением очередной интересной новинки в версии 1.23
Пакет unique упрощает работу с дубликатами. То есть, он позволяет выполнять дедупликацию таким хитрым образом, чтобы все ссылки указывали на единственную, уникальную копию. При этом пакет эффективно управляет этими копиями под капотом.
Возможно, вы уже встречали этот подход под названием Interning.
Автор статьи рассказывает и показывает, как это работает, и почему это полезно.
#go_official #go_1_23
go.dev
New unique package - The Go Programming Language
New package for interning in Go 1.23.
1 30👍9🤔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
Мысли про найм Go-разработчиков в 2024 году
https://habr.com/ru/articles/846962/
Честно, статья мне не очень понравилась, слишком сумбурно и очень много субъективных мыслей. И главное — не очень понятна основная мыль, которую пытался донести автор.
Но почитать все равно было интересно, ведь на собеседованиях я сейчас бываю довольно редко, и стало интересно что там сейчас происходит на рынке (спойлер — ровно то же самое, что и лет 5 назад).
В любом случае, автору статьи спасибо за то, что поделился своими мыслями❤️
А вот дискуссии в комментариях читать оказалось даже интересней, чем саму статью.
————
С удивлением обнаружил, что автор этой статьи также является автором довольно неплохого сайта-тренажера для решения задач по программированию - Code Abbey. Да, на первый взгляд он выглядит неказисто, но задачки довольно неплохие, и подход интересный. Со мной им когда-то давно поделился Глеб Яльчик — на его взгляд, это один из лучших тренажеров для новичков. Не буду тут подробно объяснять почему — если интересно, спросите в комментариях, обсудим.
Расскажите также в комментариях про свой опыт собеседований по Go в последнее время, только не забывайте уточнять грейд.
https://habr.com/ru/articles/846962/
Честно, статья мне не очень понравилась, слишком сумбурно и очень много субъективных мыслей. И главное — не очень понятна основная мыль, которую пытался донести автор.
Но почитать все равно было интересно, ведь на собеседованиях я сейчас бываю довольно редко, и стало интересно что там сейчас происходит на рынке (спойлер — ровно то же самое, что и лет 5 назад).
В любом случае, автору статьи спасибо за то, что поделился своими мыслями
А вот дискуссии в комментариях читать оказалось даже интересней, чем саму статью.
————
С удивлением обнаружил, что автор этой статьи также является автором довольно неплохого сайта-тренажера для решения задач по программированию - Code Abbey. Да, на первый взгляд он выглядит неказисто, но задачки довольно неплохие, и подход интересный. Со мной им когда-то давно поделился Глеб Яльчик — на его взгляд, это один из лучших тренажеров для новичков. Не буду тут подробно объяснять почему — если интересно, спросите в комментариях, обсудим.
Расскажите также в комментариях про свой опыт собеседований по Go в последнее время, только не забывайте уточнять грейд.
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Особенности трудоустройства в 2024 (golang)
За свои 15+ лет в разработке я прошёл наверное 100+ собеседований — и почти четверть из них в этом году, в течение последнего месяца:) Что‑то необычное происходит —...
👍23❤4
Golang Дайджест
почему
Продублирую здесь ответ Глеба из комментов, думаю многим будет интересно:
Потому что стандартные литкод и кодварс предлагают решать какой-то фрагмент кода. То есть они учат писать алгоритмы, но мешают писать код. Если мы говорим не про изучение алгоритмов, а про обучению программированию, то гораздо лучше подход CodeAbbey, который никак не навязывает способ решения задачи. Он говорит:
- вот описание проблемы
- вот вам тестовые данные, чтобы проверить правильно ли вы решили проблему
- далее только говорит
В результате, ученик решает задачу целиком, начиная с создания каталога с проектом и написания строчки
или еще что-то типовое. Что порождает неудержимое желание сделать свои библиотеки, для работы с данными из CodeAbbey.
Поэтому, если мы говорим про инструмент, для изучения программирования или языка, то CodeAbbey, при всей своей убогости по фичам, с моей точки зрения, находится вне конкуренции. Если же хочется задрачивать алгоритмы, то надо идти на leetcode
Потому что стандартные литкод и кодварс предлагают решать какой-то фрагмент кода. То есть они учат писать алгоритмы, но мешают писать код. Если мы говорим не про изучение алгоритмов, а про обучению программированию, то гораздо лучше подход CodeAbbey, который никак не навязывает способ решения задачи. Он говорит:
- вот описание проблемы
- вот вам тестовые данные, чтобы проверить правильно ли вы решили проблему
- далее только говорит
верно
или неверно
В результате, ученик решает задачу целиком, начиная с создания каталога с проектом и написания строчки
package main
, и заканчивая самостоятельным запуском кода. Более того, так как у ученика сохраняются все файлы локально, он довольно быстро приходит к мысли о том, что вот уже десятый раз он зачем-то пишет одни и те же функции, типа прочитать в слайс N целых чисел, данных в форматеN
V1 V2 V3 V4 ...
или еще что-то типовое. Что порождает неудержимое желание сделать свои библиотеки, для работы с данными из CodeAbbey.
Поэтому, если мы говорим про инструмент, для изучения программирования или языка, то CodeAbbey, при всей своей убогости по фичам, с моей точки зрения, находится вне конкуренции. Если же хочется задрачивать алгоритмы, то надо идти на leetcode
👍42🔥5
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 . Пересмотрев её однажды осенним вечером я понял насколько всё в ней было ужасно - начиная с...