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.