Forwarded from Николай Тузов
https://github.com/JustSkiv/goschedviz
Пока я делал завершающую часть ролика про планировщик, решил немного поиграться с визуализацией его работы... В итоге, слишком сильно увлёкся и получилось это.
Что это?
Красивая
Важно: инструмент сделан исключительно в образовательных целях (а скорее даже — побаловаться на досуге). Не стоит использовать его в продакшене!
Что умеет:
- Мониторинг метрик планировщика в реальном времени
- Визуализация заполнения LRQ и GRQ
- Построение графиков LRQ и GRQ
- Работает с любой Go программой (в теории...)
Принцип работы максимально простой: запускаем целевую программу через schedtrace, парсим вывод и строим из него различные метрики, отрисовывая результат через termui.
Подробная документация, примеры использования и инструкция по установке есть в репозитории (есть и на русском).
Также там есть подробная инструкция по контрибьюту, если кто-то захочет поучаствовать в разработке. Это хороший учебный пример для новичков (но только после чтения инструкции!).
————
P.S. Третья часть ролика про планировщик всё ещё в работе. Там, кроме прочего, как раз будет живая демонстрация работы этого инструмента на разных примерах
#go_scheduler #repo
Please open Telegram to view this post
VIEW IN TELEGRAM
Lazygit - простой консольный UI для git-комманд, написанный на Go
https://github.com/jesseduffield/lazygit
Да-да, в очередной раз я признаюсь в любви утилитам с минималистичным консольным (графическим) интерфейсом.
Честно говоря, я не уверен насколько эта штука будет удобная в реальной жизни, но точно буду пробовать, хотя бы ради эстетического удовольствия.
Но вообще, при работе с гитом, мне нравится гибридный вариант - сложные действия выполняю в хорошем GUI интерфейсе, а более простые текстом в терминале (особенно удобно с плагином oh my zsh).
#repo #terminal_ui
https://github.com/jesseduffield/lazygit
Да-да, в очередной раз я признаюсь в любви утилитам с минималистичным консольным (графическим) интерфейсом.
Честно говоря, я не уверен насколько эта штука будет удобная в реальной жизни, но точно буду пробовать, хотя бы ради эстетического удовольствия.
Но вообще, при работе с гитом, мне нравится гибридный вариант - сложные действия выполняю в хорошем GUI интерфейсе, а более простые текстом в терминале (особенно удобно с плагином oh my zsh).
#repo #terminal_ui
GitHub
GitHub - jesseduffield/lazygit: simple terminal UI for git commands
simple terminal UI for git commands. Contribute to jesseduffield/lazygit development by creating an account on GitHub.
Тестирование конкурентного кода с помощью testing/synctest
https://go.dev/blog/synctest
Damien Neil из Go team рассказал про новый (экспериментальный) пакет testing/synctest для тестирования конкурентного кода, который доступе с версии Go 1.24
Экспериментальный — значит, он доступен только при
В чём суть:
Вместо ненадёжных sleep'ов и таймаутов для проверки асинхронных операций, пакет предлагает детерминированный подход. Весь тестируемый код выполняется в изолированном окружении - bubble. В этом окружении время виртуальное и продвигается только когда все горутины заблокированы. То есть, мы точно знаем, когда все горутины достигли точки блокировки с помощью Wait()
Никаких больше фейковых часов и моков time.Now() - всё работает из коробки.
При этом, у пакета всего два метода:
Пример до:
После:
#go_official #go_experimental
https://go.dev/blog/synctest
Damien Neil из Go team рассказал про новый (экспериментальный) пакет testing/synctest для тестирования конкурентного кода, который доступе с версии Go 1.24
Экспериментальный — значит, он доступен только при
GOEXPERIMENT=synctest
В чём суть:
Вместо ненадёжных sleep'ов и таймаутов для проверки асинхронных операций, пакет предлагает детерминированный подход. Весь тестируемый код выполняется в изолированном окружении - bubble. В этом окружении время виртуальное и продвигается только когда все горутины заблокированы. То есть, мы точно знаем, когда все горутины достигли точки блокировки с помощью Wait()
Никаких больше фейковых часов и моков time.Now() - всё работает из коробки.
При этом, у пакета всего два метода:
synctest.Run()
и synctest.Wait()
Пример до:
// Классический подход с time.Sleep
func TestAfterFunc(t *testing.T) {
calledCh := make(chan struct{})
context.AfterFunc(ctx, func() {
close(calledCh)
})
// Ждем и надеемся...
time.Sleep(10 * time.Millisecond)
if called {
t.Fatal("called too early")
}
}
После:
// С synctest - детерминированно и без слипов
func TestAfterFunc(t *testing.T) {
synctest.Run(func() {
funcCalled := false
context.AfterFunc(ctx, func() {
funcCalled = true
})
synctest.Wait()
if funcCalled {
t.Fatal("called too early")
}
})
}
#go_official #go_experimental
go.dev
Testing concurrent code with testing/synctest - The Go Programming Language
Go 1.24 contains an experimental package to aid in testing concurrent code.
Forwarded from Николай Тузов
https://youtu.be/kedW1xO3Zbo
В первой половине видео мы будем шаг за шагом строить планировщик Go идя от простого к сложному, детально вникая в суть каждого нового механизма — какую проблему он решает и каким образом. В итоге мы получим Планировщик, который очень близок к настоящему (исключая совсем уж тонкие механизмы, часть из котрых я разберу в отдельных эксклюзивных для моих платных каналов роликах, ссылки см. ниже).
Во второй половине мы будем препарировать настоящий планировщик Go, изучая как ведут себя все его основные параметры вживую на примерах разных программ. Я буду это делать с помощью своей утилиты goschedviz (ссылку см. ниже), которую написал специально для этого ролика.
И в самом конце построим общую схему планировщика, чтобы окинуть взгляд все механизмы, которые мы обсудили.
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Планировщик Go — самый подробный гайд простым языком
Самый подробный гайд по Планировщику Go максимально простым языком. В первой половине видео мы будем шаг за шагом строить планировщик Go идя от простого к сложному, детально вникая в суть каждого нового механизма — какую проблему он решает и каким образом.…
Как добавить цикл while в Go
https://habr.com/ru/articles/888992/
Неплохая статья для погружения в основы компиляции Go. Автор показывает, как добавить в язык новую конструкцию, а именно - цикл
Кстати, после прочтения статьи неплохим упражнением будет добавление ещё какой-нибудь своей конструкции, пусть даже самой абсурдной, лишь бы вам было весело✨
————
UPD: канал автора стать: @siliconchannel
Кстати, можете задать ему вопросы лично в комментариях к этому посту
#go_internal #go_compiler
https://habr.com/ru/articles/888992/
Неплохая статья для погружения в основы компиляции Go. Автор показывает, как добавить в язык новую конструкцию, а именно - цикл
while
. Разумеется, добавляется он не потому что он там нужен, а лишь как простой и наглядный пример.Кстати, после прочтения статьи неплохим упражнением будет добавление ещё какой-нибудь своей конструкции, пусть даже самой абсурдной, лишь бы вам было весело
————
UPD: канал автора стать: @siliconchannel
Кстати, можете задать ему вопросы лично в комментариях к этому посту
#go_internal #go_compiler
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Компилятор GO. Добавляем цикл WHILE
На одной из конференций я наблюдал, как наши коллеги реализовывали тернарный оператор в Go с помощью комментариев. Доклад длился всего минут 10, и, честно говоря, я не смог уловить ничего внятного,...
Forwarded from Николай Тузов
https://habr.com/ru/articles/891426/
Поверьте, эта статья — отдельный подвиг, на который я потратил огромное количество времени. Даже на то, чтобы в последний раз перечитать и навести финальные штрихи, ушло буквально пол дня.
Хотелось, чтобы всё получилось идеально — каждая формулировка, каждая картинка
А теперь ваша очередь — я очень надеюсь, что эта статья побьёт мой предыдущий рекорд по лайкам и просмотрам. У Хабра нет механизмов продвижения, кроме как рейтинг статьи, поэтому вы знаете как меня отблагодарить
Основная мотивация для написания такой статьи и публикация её в открытом доступе — она должна хорошо зайти на Хабре. Иначе усилия не будут оправданными.
————
Ну и да, можете считать эту статью пробой пера и демо-версией моей будущей книги. Можно сказать, это могла бы быть полноценная глава оттуда. Правда, в книге иллюстрации будут лучше прорабатываться иллюстратором.
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Планировщик Go — самый подробный гайд простым языком
Давайте спроектируем с нуля планировщик Go — начнём с самой простой и понятной наивной реализации, а затем шаг за шагом будем разбираться, какие изъяны в ней есть, и придумывать как их решать,...
Swiss Tables новая реализация map — Go 1.24
https://go.dev/blog/swisstable
Перевод
Как вы наверняка уже знаете, в Go 1.24 встроенная реализация map была полностью переработана и теперь основана на Swiss Table. В этой статье Michael Pratt (один из авторов языка) разобрал какие преимущества даёт новая реализация по сравнению с традиционными хеш‑таблицами.
#go_official
https://go.dev/blog/swisstable
Перевод
Как вы наверняка уже знаете, в Go 1.24 встроенная реализация map была полностью переработана и теперь основана на Swiss Table. В этой статье Michael Pratt (один из авторов языка) разобрал какие преимущества даёт новая реализация по сравнению с традиционными хеш‑таблицами.
#go_official
go.dev
Faster Go maps with Swiss Tables - The Go Programming Language
Go 1.24 improves map performance with a brand new map implementation
Golang Дайджест
💦 Sticker
Простите, не смог удержаться чтобы не поделиться 🧙
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Почему я отказался от разработки игр на Rust, часть 1
Предисловие: этот пост представляет собой очень длинный перечень мыслей и проблем, возникавших у меня за годы работы; также в нём рассматриваются некоторые из аргументов, которые мне часто говорили. В...
Гайд по написанию бота, который будет вас мотивировать каждые 30 минут 💪
https://habr.com/ru/articles/897802/
Неплохой гайд — простой и понятный. Довольно короткий, можно осилить за пол часика или меньше, но при этом описано всё необходимое.
#guide #telegram_bot
https://habr.com/ru/articles/897802/
Неплохой гайд — простой и понятный. Довольно короткий, можно осилить за пол часика или меньше, но при этом описано всё необходимое.
#guide #telegram_bot
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Пишем Telegram-бота на Go(и заставляем его мотивировать нас каждые 30 минут)
Давно уже было желание сделать что-то простое и полезное в Telegram, но чтобы не пришлось постоянно за этим следить. И вот пришла гениальная идея: чтобы быть всегда замотивированным, можно написать...
Forwarded from Cross Join - канал о разработке (Anton Okolelov)
Go планирует улучшить производительность в контейнерах (proposal)
GOMAXPROCS - это настройка в Go, которая определяет максимальное количество CPU-ядер, используемых для выполнения горутин параллельно.
В Go 1.25 разработчики предлагают встроить умный GOMAXPROCS, который будет учитывать ограничения контейнера (cgroup).
Сейчас Go автоматически устанавливает GOMAXPROCS равным всем логическим ядрам на машине, что создаёт проблемы в контейнерах, где доступно меньше ресурсов. Это приводит к неэффективной работе, проблемам с производительностью и троттлингу приложения.
Проблема актуальна для всех, кто запускает Go-приложения в контейнерах (Docker, Kubernetes), и остро стоит в окружениях, где на одной машине запускается много контейнеров с ограниченными ресурсами.
Сейчас разработчики решают эту проблему ручной настройкой через переменные окружения или используя библиотеку от убера. Новое предложение добавляет в сам Go автоматическое определение ограничений CPU из cgroups и динамическое обновление GOMAXPROCS при изменении этих ограничений.
🫥 Cross Join
⠀
#golang #performance #kubernetes #docker
GOMAXPROCS - это настройка в Go, которая определяет максимальное количество CPU-ядер, используемых для выполнения горутин параллельно.
В Go 1.25 разработчики предлагают встроить умный GOMAXPROCS, который будет учитывать ограничения контейнера (cgroup).
Сейчас Go автоматически устанавливает GOMAXPROCS равным всем логическим ядрам на машине, что создаёт проблемы в контейнерах, где доступно меньше ресурсов. Это приводит к неэффективной работе, проблемам с производительностью и троттлингу приложения.
Проблема актуальна для всех, кто запускает Go-приложения в контейнерах (Docker, Kubernetes), и остро стоит в окружениях, где на одной машине запускается много контейнеров с ограниченными ресурсами.
Сейчас разработчики решают эту проблему ручной настройкой через переменные окружения или используя библиотеку от убера. Новое предложение добавляет в сам Go автоматическое определение ограничений CPU из cgroups и динамическое обновление GOMAXPROCS при изменении этих ограничений.
⠀
#golang #performance #kubernetes #docker
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
runtime: CPU limit-aware GOMAXPROCS default · Issue #73193 · golang/go
Overview Change the Go runtime on Linux to use CPU cgroup quota limits to set the default value of GOMAXPROCS. This is a concrete proposal for the ideas discussed in #33803. I've included a lot...
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 — встроенного типа данных,...
Retry в Go: От граблей к дзену отказоустойчивости
https://habr.com/ru/articles/903576/
Автор затронул хорошую тему — ретраи крайне важная штука, но многие недооценивают их сложность.
Скажем, если вы не знакомы с понятиями Exponential Backoff и Jitter, то точно стоит прочитать. Также разобраны и более глубокие моменты.
#article
https://habr.com/ru/articles/903576/
Автор затронул хорошую тему — ретраи крайне важная штука, но многие недооценивают их сложность.
Скажем, если вы не знакомы с понятиями Exponential Backoff и Jitter, то точно стоит прочитать. Также разобраны и более глубокие моменты.
#article
Хабр
Retry в Go: От граблей к дзену отказоустойчивости
В мире распределенных систем и микросервисов сетевые сбои, временная недоступность сервисов или всплески нагрузки — не исключение, а скорее правило. Отказ одного компонента не должен каскадом обрушить...
Писать или не писать простой код?
Предлагаю вашему вниманиюдве три статьи:
1. Пиши простой код
2. Не пиши простой код
3. Просто пиши код
Интересная и горячая дискуссия, которая нас с вами тоже касается, не пропустите.
От комментариев я пока воздержусь, но, возможно, чуть позже поделюсь и своим мнением по итогам🌚
#article #discussion
Предлагаю вашему вниманию
1. Пиши простой код
2. Не пиши простой код
3. Просто пиши код
Интересная и горячая дискуссия, которая нас с вами тоже касается, не пропустите.
От комментариев я пока воздержусь, но, возможно, чуть позже поделюсь и своим мнением по итогам
#article #discussion
Please open Telegram to view this post
VIEW IN TELEGRAM