Junior — Middle
Jarayonlarni rejalashtirish tizimida vazifa navbatlari qanday amalga oshiriladi?
sobes.tech AI
AIdan javob
Go'dagi jarayonlarni rejalashtirish tizimlarida (scheduler) vazifa navbatlari odatda kanallar (channels) va navbatlar (queues) kabi ma'lumot tuzilmalar yordamida amalga oshiriladi.
Asosiy usullar:
-
Kanallar (channels): Go o'z ichiga olgan kanallar, goroutinlar orasida vazifalarni xavfsiz tarzda uzatishga imkon beradi. Kanal FIFO navbati sifatida qaralishi mumkin.
-
Slicing yoki ro'yxatlar asosida navbatlar: Ba'zan, murakkabroq mantiq uchun, sinxronizatsiya uchun mutex bilan o'z navbatlarini slicing yoki ro'yxatlarga asoslangan o'ziga xos amalga oshirishlar ishlatiladi.
Oddiy vazifa navbati misoli, kanal yordamida:
package main
import (
"fmt"
"time"
)
func worker(tasks <-chan int) {
for task := range tasks {
fmt.Println("Vazifa ishlash", task)
time.Sleep(time.Second) // ishni simulyatsiya qilish
}
}
func main() {
tasks := make(chan int, 5) // bufferli kanal
go worker(tasks)
for i := 1; i <= 10; i++ {
tasks <- i
fmt.Println("Vazifa qo'shildi", i)
}
close(tasks)
time.Sleep(2 * time.Second)
}
Shu tarzda, kanallar rejalashtiruvchi uchun xavfsiz va qulay vazifa navbatini ta'minlaydi.