Ответ
Да, в Go горутина может временно не вытесняться, если выполняет долгую операцию без точек вытеснения. Планировщик Go кооперативный и вытесняет горутины только в определенных точках (например, при вызове функций, канальных операциях, системных вызовах).
Пример:
func main() {
runtime.GOMAXPROCS(1)
go func() {
for {} // бесконечный цикл без точек вытеснения
}()
time.Sleep(time.Millisecond)
println("Эта строка может никогда не выполниться")
}
В этом случае горутина с бесконечным циклом заблокирует планировщик, так как нет точек вытеснения. На практике такое встречается редко, но важно избегать долгих вычислений без точек вытеснения. Можно добавить runtime.Gosched() в цикл для явного уступания CPU.