Sobes.tech
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č.