Back to questions
Junior — Middle
82
Можете объяснить принцип работы планировщика задач в языке Go и его взаимодействие с системными потоками?
Answer from AI
sobes.tech AI
В языке Go планировщик задач (scheduler) отвечает за управление горутинами — легковесными потоками, которые запускаются внутри одного системного потока (OS thread).
Go использует модель M:N, где M — количество системных потоков, а N — количество горутин. Планировщик распределяет горутины по доступным системным потокам, переключаясь между ними для эффективного использования CPU.
Основные компоненты планировщика:
- G (goroutine) — структура, представляющая горутину.
- M (machine) — системный поток, на котором выполняются горутины.
- P (processor) — логический процессор, который связывает G и M, управляет выполнением.
Принцип работы:
- Горутине (G) назначается P.
- P связывается с M (системным потоком).
- M выполняет горутину.
- Планировщик переключает выполнение между горутинами, когда одна блокируется (например, на ввод/вывод) или истекает квант времени.
Это позволяет Go эффективно использовать системные ресурсы, обеспечивая высокую конкурентность без необходимости создавать множество тяжелых системных потоков.
Пример создания горутины:
func main() {
go func() {
fmt.Println("Hello from goroutine")
}()
fmt.Println("Hello from main")
time.Sleep(time.Second) // Ждем, чтобы горутина успела выполниться
}