Junior — Middle
Át lehet adni egy feladatot egy goroutine-tól egy másiknak, amely éppen inaktív állapotban van?
sobes.tech MI
Válasz az MI-től
Go nyelven nem lehet közvetlenül átadni egy feladatot egy goroutine-tól egy másiknak, amely várakozó állapotban van, mivel a goroutine-oknak nincs beépített mechanizmusuk a feladatok átadására egymás között.
Azonban a feladatok közötti átadás szervezéséhez általában csatornákat (channels) használnak. Egy goroutine küldhet feladatokat egy csatornára, míg egy másik fogadja és végrehajtja azokat. Ha a feladatokat fogadó goroutine várakozik, akkor a csatornáról várja az adatokat, és azokat azonnal feldolgozza, amint megkapja őket.
Példa:
tasks := make(chan func())
// Végrehajtó goroutine
go func() {
for task := range tasks {
task() // végrehajtja a feladatot
}
}()
// Küldő goroutine
tasks <- func() {
fmt.Println("Feladat befejezve")
}
Így a feladat a csatornán keresztül kerül átadásra, és a várakozó goroutine fogadja és végrehajtja azt.