Sobes.tech
Junior — Middle

Kako realizovati sekvencijalno izvršavanje više gorutina sa prenosom podataka između njih?

sobes.tech АИ

Одговор од АИ

U Go jeziku, za sekvencijalno izvršavanje više gorutina sa prenosom podataka između njih, mogu se koristiti sledeći načini:

  1. Kanali (channels) — glavni i najidiomatičniji način prenosa podataka između gorutina. Možete kreirati kanal putem kojeg jedna gorutina šalje podatke, a sledeća ih prima i obrađuje, zatim ih prosleđuje dalje.
ch1 := make(chan int)
ch2 := make(chan int)

// Prva gorutina
go func() {
    ch1 <- 42 // slanje podataka
}()

// Druga gorutina
go func() {
    val := <-ch1 // primanje podataka
    ch2 <- val * 2
}()

// Glavna gorutina prima rezultat
result := <-ch2
fmt.Println(result) // 84
  1. WaitGroup + kanali — za kontrolu završetka gorutina i sekvencu.

  2. Prenos podataka putem zatvaranja ili sinhronizovanih struktura — manje uobičajeno, ali moguće.

  3. Korišćenje konteksta (context.Context) — za upravljanje vremenom trajanja i otkazivanjem, ali ne za direktan prenos podataka.

Kanali su najjednostavniji i najpouzdaniji način za organizovanje sekvencijalne obrade sa prenosom podataka između gorutina.