Sobes.tech
Junior — Middle

Kako su implementirane redovi zadataka unutar sistema planiranja procesa?

sobes.tech АИ

Одговор од АИ

U sistemima za planiranje procesa (scheduler) u Go, redovi zadataka se obično implementiraju pomoću struktura podataka kao što su kanali (channels) i redovi (queues).

Glavni načini:

  • Kanali (channels): Go pruža ugrađene kanale koji omogućavaju siguran prenos zadataka između gorutina. Kanal se može smatrati FIFO redom.

  • Redovi na sečkama ili listama: Ponekad, za složeniju logiku, koriste se sopstvene implementacije redova zasnovane na sečkama ili listama sa mutexima za sinhronizaciju.

Primer jednostavnog reda zadataka koristeći kanal:

package main

import (
    "fmt"
    "time"
)

func worker(tasks <-chan int) {
    for task := range tasks {
        fmt.Println("Obrada zadatka", task)
        time.Sleep(time.Second) // simulacija rada
    }
}

func main() {
    tasks := make(chan int, 5) // baferovani kanal

    go worker(tasks)

    for i := 1; i <= 10; i++ {
        tasks <- i
        fmt.Println("Dodat zadatak", i)
    }
    close(tasks)
    time.Sleep(2 * time.Second)
}

Na ovaj način, kanali obezbeđuju sigurnu i pogodnu red za zadatke za planera.