Back to questions
Junior — Middle
81
Каким образом реализовать выполнение команд одновременно на одном процессорном ядре?
Answer from AI
sobes.tech AI
В Go однопоточное выполнение нескольких команд на одном процессорном ядре достигается с помощью горутин — легковесных потоков, которые планировщик Go распределяет на доступные системные потоки. Даже если у вас одно ядро, горутины будут выполняться конкурентно, переключаясь между собой, создавая эффект одновременного выполнения.
Для этого достаточно просто запускать функции как горутины с помощью ключевого слова go:
package main
import (
"fmt"
"time"
)
func task(name string) {
for i := 0; i < 5; i++ {
fmt.Println(name, "выполняется", i)
time.Sleep(100 * time.Millisecond)
}
}
func main() {
go task("Горутина 1")
go task("Горутина 2")
// Ждем, чтобы горутины успели выполниться
time.Sleep(1 * time.Second)
}
Даже на одном ядре горутины будут переключаться планировщиком, создавая иллюзию одновременного выполнения. Для контроля количества используемых ОС потоков можно использовать runtime.GOMAXPROCS(1).
import "runtime"
func main() {
runtime.GOMAXPROCS(1) // ограничиваем выполнение одним ядром
// запуск горутин
}