Junior — Middle
Ar galima perduoti užduotį vienai goroutine kitai, kuri tuo metu yra laisva?
sobes.tech AI
Atsakymas iš AI
Go kalboje nėra tiesioginio užduoties perdavimo iš vienos goroutine į kitą, kuri yra laukimo būsenoje, nes goroutine'ų tarpusavio užduočių perdavimo mechanizmas nėra įdiegtas.
Tačiau, norint organizuoti užduočių perdavimą tarp goroutine'ų, dažniausiai naudojami kanalai (channels). Viena goroutine gali siųsti užduotis į kanalą, o kita jas priimti ir vykdyti. Jei priimančioji goroutine laukia, ji lauks duomenų iš kanalo ir juos iš karto apdoros, kai tik gaus.
Pavyzdys:
tasks := make(chan func())
// Vykdanti goroutine
go func() {
for task := range tasks {
task() // vykdyti užduotį
}
}()
// Siunčianti goroutine
tasks <- func() {
fmt.Println("Užduotis baigta")
}
Taip užduotis perduodama per kanalą, o laukiančioji goroutine ją priima ir vykdo.