Junior — Middle
Процесс пландоо системасында тапшырмалар кезектери кандай ишке ашырылган?
sobes.tech AI
AIден жооп
Go'da proseslerin planlaşdırılması sistemlərində (scheduler) tapşırıq növbələri adətən məlumat strukturları kimi kanallar (channels) və növbələr (queues) istifadə edilərək həyata keçirilir.
Əsas üsullar:
-
Kanallar (channels): Go daxilində olan kanallar, goroutine'lər arasında təhlükəsiz şəkildə uzatmağa imkan verir. Kanal FIFO növbəsi kimi qəbul edilə bilər.
-
Slicing və ya siyahılar üzərində növbələr: Bəzən daha mürəkkəb məntiq üçün, sinxronizasiya üçün mutex-lərlə öz növbələrini slicing və ya siyahılar əsasında həyata keçirirlər.
Sadə tapşırıq növbəsinin nümunəsi, kanal istifadə edilərək:
package main
import (
"fmt"
"time"
)
func worker(tasks <-chan int) {
for task := range tasks {
fmt.Println("Tapşırıq işlənir", task)
time.Sleep(time.Second) // işin simulyasiyası
}
}
func main() {
tasks := make(chan int, 5) // tamponlu kanal
go worker(tasks)
for i := 1; i <= 10; i++ {
tasks <- i
fmt.Println("Əlavə olunan tapşırıq", i)
}
close(tasks)
time.Sleep(2 * time.Second)
}
Bu şəkildə, kanallar scheduler üçün təhlükəsiz və rahat tapşırıq növbəsini təmin edir.