Junior — Middle
Czy można przekazać zadanie jednej goroutine innej, która jest w stanie oczekiwania?
sobes.tech AI
Odpowiedź od AI
W Go nie można bezpośrednio przekazać zadania jednej goroutine do drugiej, która jest w stanie oczekiwania, ponieważ goroutine nie mają wbudowanego mechanizmu przekazywania zadań między sobą.
Jednak do organizacji przekazywania zadań między goroutine zwykle używa się kanałów (channels). Jedna goroutine może wysłać zadania do kanału, a inna je odebrać i wykonać. Jeśli goroutine odbierająca zadania jest w stanie oczekiwania, będzie czekać na dane z kanału i od razu je przetworzy po ich otrzymaniu.
Przykład:
tasks := make(chan func())
// Goroutine wykonawcza
go func() {
for task := range tasks {
task() // wykonaj zadanie
}
}()
// Goroutine wysyłająca
tasks <- func() {
fmt.Println("Zadanie wykonane")
}
W ten sposób zadanie jest przekazywane przez kanał, a goroutine oczekująca je odbiera i wykonuje.