Junior — Middle
Kako se u jeziku Go implementira konkurencija, asinhronost i paralelnost?
sobes.tech АИ
Одговор од АИ
U Go, konkurentnost, asinhronost i paralelizam se implementiraju pomoću gorutina i kanala.
- Gorutine su lagani niti koje se pokreću pomoću ključne reči
go. Omogućavaju asinhrono izvršavanje funkcija i takmičenje za resurse. - Kanali se koriste za sigurnu razmenu podataka između gorutina, obezbeđujući sinhronizaciju i prenos poruka.
Paralelizam se postiže pokretanjem više gorutina koje mogu istovremeno da se izvršavaju na više jezgara procesora, ako je postavljeno GOMAXPROCS.
Primer:
package main
import (
"fmt"
"time"
)
func worker(id int, ch chan string) {
time.Sleep(time.Second)
ch <- fmt.Sprintf("Radnik %d završen", id)
}
func main() {
ch := make(chan string)
for i := 1; i <= 3; i++ {
go worker(i, ch) // pokreće gorutinu
}
for i := 1; i <= 3; i++ {
msg := <-ch // prima rezultat iz kanala
fmt.Println(msg)
}
}
Na ovaj način, Go pruža jednostavne i efikasne alate za rad sa konkurencijom i paralelizmom.