Sobes.tech
Junior — Middle

Чӣ гуна навбатҳои вазифа дар дохили системаи нақшаи равандиҳо татбиқ шудаанд?

sobes.tech AI

Ҷавоб аз AI

Дар системаҳои нақшаи равандиҳо (scheduler) дар Go, навбатҳои вазифаҳо одатан бо истифода аз сохторҳои додаҳо, монанди каналҳо (channels) ва навбатҳо (queues) амалӣ карда мешаванд.

Роҳҳои асосӣ:

  • Каналҳо (channels): Go каналҳои дарунсохтро пешниҳод мекунад, ки имкон медиҳанд, ки вазифаҳо бехатарона байни goroutine-ҳо интиқол ёбанд. Каналро ҳамчун навбати FIFO метавон ҳисоб кард.

  • Навбатҳо дар срезҳо ё рӯйхатҳо: Баъзан барои логикаи мураккабтар, истифодаи навбатҳои худсохт дар асоси срезҳо ё рӯйхатҳо бо mutex барои ҳамоҳангсозӣ истифода мешавад.

Масалан, навбати оддӣ бо истифода аз канал:

package main

import (
    "fmt"
    "time"
)

func worker(tasks <-chan int) {
    for task := range tasks {
        fmt.Println("Коркарди вазифа", task)
        time.Sleep(time.Second) // симулясияи кор
    }
}

func main() {
    tasks := make(chan int, 5) // канал бо буфер

    go worker(tasks)

    for i := 1; i <= 10; i++ {
        tasks <- i
        fmt.Println("Вазифа илова шуд", i)
    }
    close(tasks)
    time.Sleep(2 * time.Second)
}

Тавре ки мебинем, каналҳо навбати бехатар ва қулай барои вазифаҳо барои scheduler таъмин мекунанд.