Junior — Middle
Este posibil să transferați o sarcină de la o goroutine la alta, care se află în stare de inactivitate?
sobes.tech AI
Răspuns de la AI
În Go, nu se poate transmite direct o sarcină de la o gorutină la alta care se află în stare de așteptare, deoarece gorutinele nu au un mecanism încorporat pentru transferul sarcinilor între ele.
Cu toate acestea, pentru a organiza transferul de sarcini între gorutine, se folosesc de obicei canale (channels). O gorutină poate trimite sarcini într-un canal, iar alta le poate primi și executa. Dacă gorutina care primește sarcinile este în stare de așteptare, va aștepta date din canal și le va procesa imediat ce le primește.
Exemplu:
tasks := make(chan func())
// Gorutină executantă
go func() {
for task := range tasks {
task() // execută sarcina
}
}()
// Gorutină trimițătoare
tasks <- func() {
fmt.Println("Sarcină finalizată")
}
Astfel, sarcina este transmisă prin canal, iar gorutina în așteptare o primește și o execută.