Ответ
Нет, горутины не всегда выполняются параллельно. Они работают конкурентно, но параллелизм зависит от количества доступных ядер CPU и настройки среды выполнения Go (GOMAXPROCS).
- Одно ядро: Горутины выполняются конкурентно, переключаясь на одном ядре.
- Несколько ядер: Горутины могут выполняться параллельно, если GOMAXPROCS > 1.
Пример:
func main() {
runtime.GOMAXPROCS(1) // Ограничиваем одним ядром
go func() { fmt.Println("Горутина 1") }()
go func() { fmt.Println("Горутина 2") }()
time.Sleep(time.Second)
}
Даже с двумя горутинами, при GOMAXPROCS=1, они выполнятся конкурентно, но не параллельно.