Sobes.tech
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.