🟡 Средний · 2 очк. Горутины и конкурентность
Что делает runtime.Gosched() и когда его стоит использовать?
A Завершает текущую горутину
B Уступает процессор планировщику, позволяя другим горутинам выполниться; на практике редко нужен с Go 1.14+
C Запускает новую горутину
D Блокирует горутину на 1 мс
Объяснение вопроса

runtime.Gosched() - явная уступка процессора. Текущая горутина ставится в очередь, планировщик может запустить другую:

for i := 0; i < 1000000; i++ {
    heavyComputation(i)
    if i%1000 == 0 {
        runtime.Gosched() // дать шанс другим горутинам
    }
}

Когда Gosched() был нужен (до Go 1.14):

  • Tight loops без вызовов функций блокировали поток целиком
  • GOMAXPROCS=1 - единственный поток мог быть захвачен одной горутиной

С Go 1.14+ (asynchronous preemption) планировщик прерывает горутины по сигналу, поэтому Gosched() практически не нужен. Остается полезен:

  • В тестах для проверки конкурентного поведения
  • В бенчмарках для имитации реальных условий
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.