Junior — Middle
Je možné preniesť úlohu z jednej gorutiny na inú, ktorá je v stave nečinnosti?
sobes.tech AI
Odpoveď od AI
V jazyku Go nie je možné priamo odovzdať úlohu jednej goroutine druhej, ktorá je v stave čakania, pretože gorutiny nemajú zabudovaný mechanizmus na prenos úloh medzi sebou.
Avšak, na organizáciu prenosu úloh medzi gorutinami sa zvyčajne používajú kanály (channels). Jedna gorutina môže posielať úlohy do kanála, zatiaľ čo iná ich môže prijímať a vykonávať. Ak gorutina, ktorá prijíma úlohy, čaká, bude čakať na dáta z kanála a ihneď ich spracuje pri ich prijatí.
Príklad:
tasks := make(chan func())
// Vykonávajúca gorutina
go func() {
for task := range tasks {
task() // vykoná úlohu
}
}()
// Posielajúca gorutina
tasks <- func() {
fmt.Println("Úloha dokončená")
}
Týmto spôsobom je úloha prenášaná cez kanál a čakajúca gorutina ju prijíma a vykonáva.