Junior — Middle
Ako implementovať súčasné vykonávanie príkazov na jednom procesorovom jadre?
sobes.tech AI
Odpoveď od AI
V jazyku Go sa dosahuje paralelné vykonávanie viacerých príkazov na jednom procesorovom jadre pomocou gorútin, čo sú ľahké vlákna, ktoré plánovač Go rozdeľuje na dostupné systémové vlákna. Aj keď máte iba jedno jadro, gorutiny budú vykonávať súbežne, prepínajúc medzi sebou, čím vytvárajú efekt súčasného vykonávania.
Na to stačí spustiť funkcie ako gorutiny pomocou kľúčového slova go:
package main
import (
"fmt"
"time"
)
func úloha(názov string) {
for i := 0; i < 5; i++ {
fmt.Println(názov, "beží", i)
time.Sleep(100 * time.Millisecond)
}
}
func main() {
go úloha("Gorutina 1")
go úloha("Gorutina 2")
// Čakáme, kým gorutiny neskončia
time.Sleep(1 * time.Second)
}
Aj na jednom jadre budú gorutiny prepínané plánovačom, čím vznikne ilúzia súčasného vykonávania. Na kontrolu počtu používaných systémových vlákien môžete použiť runtime.GOMAXPROCS(1).
import "runtime"
func main() {
runtime.GOMAXPROCS(1) // obmedzíme na jedno jadro
// spustenie gorútin
}