Sobes.tech
Junior — Middle

Da li je moguće preneti zadatak od jedne goroutine do druge, koja je u stanju mirovanja?

sobes.tech АИ

Одговор од АИ

U Go jeziku, nije moguće direktno preneti zadatak iz jedne gorutine u drugu koja je u stanju čekanja, jer gorutine nemaju ugrađeni mehanizam za prenos zadataka između njih.

Međutim, za organizaciju prenosa zadataka između gorutina, obično se koriste kanali (channels). Jedna gorutina može slati zadatke u kanal, a druga ih može primiti i izvršiti. Ako gorutina koja prima zadatke čeka, ona će čekati podatke iz kanala i odmah će ih obraditi po prijemu.

Primer:

 tasks := make(chan func())

// Izvršna gorutina
go func() {
    for task := range tasks {
        task() // izvršava zadatak
    }
}()

// Pošiljalac gorutina
tasks <- func() {
    fmt.Println("Zadatak je završio")
}

Na ovaj način, zadatak se prenosi putem kanala, a gorutina koja čeka ga prima i izvršava.