Sobes.tech
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.