Junior — Middle
Kā ir īstenotas uzdevumu rindu sistēma procesa plānošanas sistēmā?
sobes.tech AI
Atbilde no AI
Procesu plānošanas sistēmās (scheduler) Go valodā uzdevumu rindas parasti tiek īstenotas, izmantojot datu struktūras, piemēram, kanālus (channels) un rindas (queues).
Galvenie veidi:
-
Kanāli (channels): Go nodrošina iebūvētos kanālus, kas ļauj droši pārsūtīt uzdevumus starp gorutīnām. Kanāls var tikt uzskatīts par FIFO rindu.
-
Rindas uz šķēlēm vai sarakstiem: Dažreiz sarežģītākai loģikai tiek izmantotas pašizstrādātas rindas, balstītas uz šķēlēm vai sarakstiem ar mutex, lai sinhronizētu.
Piemērs vienkāršas uzdevumu rindas ar kanāla palīdzību:
package main
import (
"fmt"
"time"
)
func worker(tasks <-chan int) {
for task := range tasks {
fmt.Println("Uzdevuma apstrāde", task)
time.Sleep(time.Second) // darba simulācija
}
}
func main() {
tasks := make(chan int, 5) // buferēts kanāls
go worker(tasks)
for i := 1; i <= 10; i++ {
tasks <- i
fmt.Println("Pievienots uzdevums", i)
}
close(tasks)
time.Sleep(2 * time sekundes)
}
Šādā veidā kanāli nodrošina drošu un ērtu uzdevumu rindu plānotājam.