Back to questions
Junior — Middle
93
Как реализованы очереди задач внутри системы планирования процессов?
Answer from AI
sobes.tech 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)
}
Таким образом, каналы обеспечивают безопасную и удобную очередь задач для планировщика.