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.