Junior — Middle
Hogyan valósulnak meg a feladatok sorban a folyamattervező rendszerben?
sobes.tech MI
Válasz az MI-től
Go-ban a folyamatok ütemezésében (scheduler) a feladatok sorait általában adatstruktúrák, például csatornák (channels) és sorok (queues) segítségével valósítják meg.
Fő módszerek:
-
Csatornák (channels): A Go beépített csatornákat kínál, amelyek lehetővé teszik a feladatok biztonságos átvitelét goroutine-ok között. Egy csatorna FIFO sorként értelmezhető.
-
Sorok szeleteken vagy listákon: Néha összetettebb logika esetén saját implementációkat használnak szeleteken vagy listákon alapuló sorokra mutexekkel a szinkronizáció érdekében.
Egyszerű feladatsorozat példa csatorna használatával:
package main
import (
"fmt"
"time"
)
func worker(tasks <-chan int) {
for task := range tasks {
fmt.Println("Feladat feldolgozása", task)
time.Sleep(time.Second) // munka szimuláció
}
}
func main() {
tasks := make(chan int, 5) // pufferelt csatorna
go worker(tasks)
for i := 1; i <= 10; i++ {
tasks <- i
fmt.Println("Hozzáadott feladat", i)
}
close(tasks)
time.Sleep(2 * time.Second)
}
Így a csatornák biztonságos és kényelmes feladatsorokat biztosítanak a ütemező számára.