Back to questions
Junior — Middle
84
В каких случаях задачи в горутинах помещаются в общую очередь планировщика выполнения?
Answer from AI
sobes.tech AI
В Go задачи (горутин) помещаются в общую очередь планировщика выполнения (run queue) в следующих случаях:
- Когда горутина создаётся с помощью
goи готова к выполнению, она ставится в очередь планировщика. - Если горутина блокируется (например, на операции ввода-вывода, каналах или синхронизации) и затем разблокируется, она возвращается в очередь.
- При завершении текущей горутины планировщик выбирает следующую из очереди.
Планировщик Go использует модель M:N, где M — системные потоки, N — горутины. Горутин много, они распределяются по потокам через очереди. Очередь планировщика — это структура, где хранятся готовые к выполнению горутины.
Пример:
func main() {
go func() {
fmt.Println("Горутина запущена")
}()
time.Sleep(time.Second) // Ждем, чтобы горутина успела выполниться
}
Здесь горутина после создания помещается в очередь планировщика для выполнения.