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)
}
По този начин каналите осигуряват безопасна и удобна опашка с задачи за планировчика.