| Канал | Публикаций | Подписчиков | Последний пост |
|---|---|---|---|
Библиотека Go (Golang) р…
[telegram]
|
22 | 2705 | 07.09.26 |
|
Хакер Free
[max]
|
12 | 3127 | 23.08.26 |
|
Базы Данных (Data Base) …
[max]
|
12 | 2870 | 23.08.26 |
Криптовалюта Pro #6748
[max]
|
40 | 458547 | 09.07.26 |
Образование Онлайн #8442
[max]
|
11 | 235330 | 23.08.26 |
Кино и сериалы #8493
[max]
|
15 | 152917 | 24.08.26 |
Бизнес Инфо #488
[max]
|
11 | 112038 | 04.08.26 |
| Канал | Публикаций | Подписчиков | Последний пост |
|---|---|---|---|
|
Bash Советы - Bash Scrip…
[max]
|
1 | 2800 | 28.06.26 |
|
Книги для программистов
[max]
|
1 | 3473 | 28.06.26 |
|
Программирование {BookFl…
[max]
|
1 | 3553 | 28.06.26 |
IT Новости #4897
[max]
|
17 | 78568 | 19.07.26 |
Экономика Сегодня #5310
[max]
|
31 | 235704 | 08.08.26 |
Спорт Ньюс #2053
[max]
|
37 | 341370 | 18.09.26 |
Экономика Сегодня #4009
[max]
|
33 | 457252 | 11.09.26 |
Загрузка данных...
| Размещенный пост | Текст публиакции | Рекламирующий канал | Просмотры | Просмотры 24 ч | Прирост подписчиков |
|---|
Загрузка данных...
| Размещенный пост | Текст публикации | Рекламируемый канал | Просмотры | Просмотры 24 ч | Прирост подписчиков |
|---|
| Дата и время публикации | Текст публикации | Рекламируемый канал | Динамика просмотров | Всего просмотров |
|---|---|---|---|---|
| 2026-09-21 10:54:24 | 📢 sync.Cond: Как разбудить 10 000 горутин одним вызовом (и не сломать планировщик) Представьте задачу: у вас запущено 10 000 горутин-воркеров, которые должны начать обработку данных строго одновременно, но только после того, как в память загрузится тяжелый кэш или конфигурация. Как передать им сигнал "на старт"? Вариант 1: Каналы. Если мы отправим сигнал в канал ch <- struct{}{}, проснется только одна горутина. Чтобы разбудить 10 000, придется писать цикл. Долго и неэффективно. Можно сделать close(ch) - закрытие канала мгновенно разбудит все горутины, читающие из него. Но канал можно закрыть только один раз. Что если нам нужно подавать такой массовый сигнал каждые 5 минут при обновлении кэша? Здесь на сцену выходит sync.Cond (Condition Variable) - один из самых недооцененных примитивов синхронизации. Это рупор, через который одна горутина может крикнуть толпе спящих горутин: "Событие произошло, просыпайтесь!" Как это работает У sync.Cond есть три главных метода: * Wait() - усыпить текущую горутину до получения сигнала. * Signal() - разбудить одну случайную спящую горутину. * Broadcast() - разбудить все спящие горутины разом. Чтобы sync.Cond работал, ему обязательно нужен мьютекс (sync.Mutex или sync.RWMutex), который защищает условие. ✅ Как это выглядит в коде: type AppState struct { mu sync.Mutex cond *sync.Cond configLoad bool } func NewAppState() *AppState { a := &AppState{} // Cond всегда связывается с мьютексом a.cond = sync.NewCond(&a.mu) return a } func (a *AppState) Worker(id int) { a.mu.Lock() // Обязательно лочим мьютекс перед Wait! // 🤡 Джун напишет тут 'if'. Сеньор пишет 'for'. Почему — ниже. for !a.configLoad { // Wait атомарно снимает лок с a.mu и усыпляет горутину. // Когда она проснется, Wait атомарно вернет лок на место. a.cond.Wait() } a.mu.Unlock() // Разлочили и пошли работать fmt.Printf("Воркер %d начал работу!\n", id) } func (a *AppState) UpdateConfig() { a.mu.Lock() a.configLoad = true a.mu.Unlock() // БУМ! Будим все тысячи спящих горутин одним вызовом a.cond.Broadcast() } 🔥 Senior Tip: Почему Wait() всегда пишут в цикле for? Главная ловушка sync.Cond заключается в том, что вызов Wait() нельзя использовать внутри if !condition { cond.Wait() }. Спецификация POSIX-систем и рантайм Go допускают Spurious Wakeups (Ложные пробуждения). Горутина может проснуться просто так, даже если никто не вызывал Broadcast. Кроме того, между моментом, когда горутина проснулась, и моментом, когда она захватила мьютекс для проверки, другая горутина могла успеть поменять состояние configLoad обратно на false. Цикл for гарантирует, что проснувшаяся горутина обязательно еще раз проверит условие, прежде чем пойти дальше. Когда sync.Cond НЕ нужен? Если событие происходит только один раз за время жизни приложения (например, Graceful Shutdown) - не тащите sync.Cond. Обычного закрытия канала close(done) или использования context.Context хватит за глаза. sync.Cond блистает именно в сценариях многоразовых массовых оповещений. #golang #concurrency #sync #underhood #architecture 👉 @golang_lib 📢 sync.Cond: Как… | — |
|
204 |
| 2026-09-21 07:00:40 | Go vet не поможет: как создать собственный анализатор кода для Go Инструменты статического анализа давно стали частью разработки на Go, а встроенный go vet помогает находить распространённые ошибки в коде. Но что делать, если стандартных возможностей недостаточно и нужны проверки, учитывающие особенности конкретного проекта? Один из вариантов — создать собственный анализатор. На вебинаре вы узнаете, какие инструменты Go предоставляет для анализа исходного кода и как они устроены. Вам расскажут, что происходит «под капотом» статического анализа. Эксперты разберут семантическую модель программы и покажут, как строить синтаксическое дерево. В финале вы получите собственный анализатор, который сможет находить ошибки с учётом требований и особенностей конкретного проекта. Подробности — по ссылке. После вебинара всем зарегистрированным пришлем запись. Go vet не поможе… | — |
|
238 |
| 2026-09-17 10:30:04 | ИТ-сообщество, хватит онлайн-митапов – приходите офлайн. 18 сентября в Москве состоится ЛЦТ. Старт Кодинга, открывающее событие восьмого сезона хакатона «Лидеры цифровой трансформации». Деловые сессии, нетворкинг, битва роботов, полигон роверов, зона кодинга и другие активности. 📅 18 сентября, с 15:00 📍 Центр роботизации «Создатели», ул. Миклухо-Маклая, 27А, 3 этаж (м. Беляево) 🔗 Регистрация на событие и подробности по ссылке. Количество мест ограничено! ИТ-сообщество, х… | — |
|
191 |
| 2026-06-26 00:54:22 | доступна по подписке видеть чтобы подписку доступна по подп… | — |
|
36936 |
Год
Месяц
Неделя
Загрузка данных...
| Время | Контент | Подписчиков | Кто ссылался | Просмотры 48ч | Просмотры 24ч |
|---|