Junior — Middle
Kas ülesannet ühelt goroutine'ilt teisele, mis on hetkel ooterežiimil, võimalik?
sobes.tech AI
Vastus AI-lt
Go keeles ei ole võimalik otse ühe goroutine ülesannet teisele üle anda, kuna goroutineidel puudub sisseehitatud mehhanism ülesannete vahetamiseks nende vahel.
Kuid ülesannete vahetamise korraldamiseks goroutine'ide vahel kasutatakse tavaliselt kanaleid (channels). Üks goroutine võib saata ülesandeid kanalile, samal ajal kui teine neid vastu võtab ja täidab. Kui ülesandeid vastu võttev goroutine ootab, siis ta ootab andmeid kanalilt ja töötleb need kohe, kui need saab.
Näide:
tasks := make(chan func())
// Täitmise goroutine
go func() {
for task := range tasks {
task() // täidab ülesande
}
}()
// Saatmise goroutine
tasks <- func() {
fmt.Println("Ülesanne lõpetatud")
}
Seega, ülesanne edastatakse kanali kaudu ning ootav goroutine võtab selle vastu ja täidab.