Sobes.tech
Junior — Middle

Как са реализирани опашките с задачи в системата за планиране на процеси?

sobes.tech AI

Отговор от AI

В системите за планиране на процеси (scheduler) в Go опашките с задачи обикновено се реализират с помощта на структури от данни като канали (channels) и опашки (queues).

Основни методи:

  • Канали (channels): Go предоставя вградени канали, които позволяват безопасно прехвърляне на задачи между горутините. Каналът може да се разглежда като 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)
}

По този начин каналите осигуряват безопасна и удобна опашка с задачи за планировчика.