Junior — Middle
Ako sú v systéme plánovania procesov implementované fronty úloh?
sobes.tech AI
Odpoveď od AI
V systémoch plánovania procesov (scheduler) v Go sú fronty úloh zvyčajne implementované pomocou dátových štruktúr ako sú kanály (channels) a fronty (queues).
Hlavné spôsoby:
-
Kanály (channels): Go poskytuje vstavané kanály, ktoré umožňujú bezpečný prenos úloh medzi gorutinami. Kanál možno považovať za FIFO frontu.
-
Fronty na slice-och alebo zoznamoch: Niekedy sa pre zložitejšiu logiku používajú vlastné implementácie front založené na slice-och alebo zoznamoch s mutexmi na synchronizáciu.
Príklad jednoduchej fronty úloh s použitím kanála:
package main
import (
"fmt"
"time"
)
func worker(tasks <-chan int) {
for task := range tasks {
fmt.Println("Spracovanie úlohy", task)
time.Sleep(time.Second) // simulácia práce
}
}
func main() {
tasks := make(chan int, 5) // vyrovnávací kanál
go worker(tasks)
for i := 1; i <= 10; i++ {
tasks <- i
fmt.Println("Pridaná úloha", i)
}
close(tasks)
time.Sleep(2 * time.Second)
}
Týmto spôsobom kanály zabezpečujú bezpečnú a pohodlnú frontu úloh pre plánovač.