Sobes.tech
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.