Вопрос проверяет понимание механизма пробуждения goroutine и очередей планировщика.
Когда событие, на которое ожидала goroutine, происходит, runtime переводит ее в очередь готовых к выполнению. Планировщик затем назначает ее на доступный поток. Это происходит автоматически и прозрачно для разработчика. Механизм используется для каналов, mutex и I/O.
После блокировки goroutine находится в состоянии ожидания.
Когда событие происходит:
Канал получает данные.
Mutex освобождается.
Завершается I/O.
Runtime:
Помещает goroutine в ready queue.
Планировщик выбирает ее для выполнения.
Планировщик:
Распределяет goroutine по потокам.
Балансирует нагрузку.
Минимизирует переключения контекста.
Разработчик:
Не управляет пробуждением вручную.
Работает через каналы и синхронизацию.
Runtime берет управление на себя.
Goroutine возвращается к выполнению, когда runtime фиксирует событие, переводит ее в очередь готовых и планировщик назначает поток.