Junior — Middle
Ako je zabezpečená práca a synchronizácia vlákien vykonávania v Golang?
sobes.tech AI
Odpoveď od AI
V Go-u sa za rad sa tokovima izvršavanja koriste goroutine-ove — lagane tokove koje upravlja Go runtime. Goroutine-ovi se pokreću pomoću ključne reči go pre poziva funkcije, što omogućava njihovo asinhrono izvršavanje.
Za sinhronizaciju goroutine-ova koriste se kanali (channels) i primitives iz paketa sync (npr. Mutex, WaitGroup). Kanali obezbeđuju sigurnu razmenu podataka između goroutine-ova i omogućavaju njihovu sinhronizaciju.
Primer korišćenja goroutine-ova i kanala:
package main
import (
"fmt"
"time"
)
func worker(ch chan string) {
time.Sleep(time.Second)
ch <- "gotovo"
}
func main() {
ch := make(chan string)
go worker(ch)
msg := <-ch
fmt.Println("Rad goroutine-a:", msg)
}
Ovde, glavna goroutine pokreće worker u posebnoj goroutine, koja nakon kašnjenja šalje poruku u kanal. Glavna goroutine čeka da primi poruku iz kanala, što obezbeđuje sinhronizaciju.