runtime.Gosched() - явная уступка процессора. Текущая горутина ставится в очередь, планировщик может запустить другую:
for i := 0; i < 1000000; i++ {
heavyComputation(i)
if i%1000 == 0 {
runtime.Gosched() // дать шанс другим горутинам
}
}
Когда Gosched() был нужен (до Go 1.14):
С Go 1.14+ (asynchronous preemption) планировщик прерывает горутины по сигналу, поэтому Gosched() практически не нужен. Остается полезен: