Планировщик Go управляет горутинами, потоками операционной системы и логическими процессорами, используя модель GMP:
- G (Goroutine): Легковесная, независимая единица выполнения. Содержит стек, указатель на инструкцию и другую информацию о состоянии. Множество горутин могут работать на одном потоке ОС.
- M (Machine): Поток операционной системы. Выступает в роли исполнителя, запускающего код горутины. Множество M может быть доступно для планировщика.
- P (Processor): Логический процессор. Предоставляет контекст для выполнения горутины. Содержит локальную очередь горутин, которые готовы к выполнению на данном M. Количество P по умолчанию равно
runtime.NumCPU()
.
Взаимодействие:
- Горутина (G) создается и помещается в глобальную или локальную очередь P.
- Свободный поток M запрашивает P. Если P доступен, M привязывается к нему.
- M берет горути