TGViewer
Библиотека Go-разработчика | Golang Библиотека Go-разработчика | Golang @goproglib · 24.1K subscribers
Post #7479 4.17K
🔗 Как Go запускает горутины

В Go тысячи горутин не привязаны напрямую к потокам ОС. Runtime распределяет их через GMP-модель:

⬇️G (Goroutine) — что
⬇️нужно выполнить;
⬇️M (Machine) — поток ОС,
⬇️на котором выполняется
⬇️код;
⬇️P (Processor) — ресурс
⬇️планировщика, который
⬇️связывает G и M.

У каждого P есть своя локальная очередь горутин. Если работы не хватает, планировщик может взять её из глобальной очереди или украсть часть очереди другого P — это work-stealing.

🟡 А если M блокируется на syscall, P не обязан ждать его возвращения: runtime может передать P другому потоку через handoff.

🟡 Отдельно за состоянием runtime следит sysmon, а сетевые операции обслуживает netpoller, поэтому ожидание I/O обычно не означает простой потока ОС. Именно эта связка позволяет Go одновременно держать много горутин и эффективно использовать несколько CPU.

А вся схема — на картинке 🤩

🔗 Читать подробнее про планировщика

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика

#GoDeep
  • ❤ 9
  • 👍 6
  • 🥰 2
  • 🤔 1
More from @goproglib
  1. Sep 20, 2026🤔 Вопрос с собеседования по Go Что выведет программа? ❤️ — [1 2 3 4 5] / [1 2 10] 🔥 — [1…
  2. Sep 19, 2026🛠 Rune — open-source IDE и terminal multiplexer на Go Rune объединяет IDE, терминал и AI-…
  3. Sep 18, 2026🤩 SQLite вместо отдельного брокера в Go Watermill поддерживает SQLite Pub/Sub — сообщения…
  4. Sep 17, 2026⚡️ Go 1.27 ускоряет небольшие аллокации В Go 1.27 появился size-specialized memory allocat…
  5. Sep 16, 2026🛠 Напишите конфиг сами viper — самая частая рекомендация для конфигурации в Go. Он умеет…
  6. Sep 15, 2026🔥 Шейдеры на Go: как оживить игру с помощью кода В Ebitengine шейдеры пишутся на Kage — я…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →