Sobes.tech
Назад к вопросам
Junior — Middle
83

Каким образом реализовать выполнение команд одновременно на одном процессорном ядре?

Ответ от нейросети

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) // ограничиваем выполнение одним ядром
    // запуск горутин
}