2.5Kпросмотров
31.3%от подписчиков
1 декабря 2025 г.
🎬 ВидеоScore: 2.7K
👣 Как работает планировщик задач в Golang под капотом Планировщик задач в Golang работает по схеме G-P-M:
горутины (G) распределяются по логическим процессорам (P), а те в свою очередь выполняются на системных потоках (M).
Так достигается мультиплексирование миллионов горутин на ограниченное число потоков ОС. Когда горутина блокируется (syscall, mutex, канал без данных) - её паркуют, а поток освобождают.
Когда появляется работа — планировщик перебрасывает G между очередями P и старается держать все ядра загруженными. Чтобы код работал эффективно:
- не плодите лишние горутины
- избегайте долгих блокировок
- контролируйте GOMAXPROCS
- проверяйте количество G через runtime package main import ( "fmt" "runtime" "time"
) func main() { runtime.GOMAXPROCS(runtime.NumCPU()) for i := 0; i < 5; i++ { go func(id int) { for { fmt.Println("goroutine", id, "работает на потоке") time.Sleep(200 * time.Millisecond) } }(i) } for { fmt.Println("горутин сейчас:", runtime.NumGoroutine()) time.Sleep(time.Second) }
} https://www.youtube.com/shorts/XQmGO29JE7w #junior #golang