Junior — Middle
Jak w języku Go realizowana jest konkurencja, asynchroniczność i równoległość?
sobes.tech AI
Odpowiedź od AI
W języku Go konkurencja, asynchroniczność i równoległość są realizowane za pomocą gorutyn i kanałów.
- Gorutyny to lekkie wątki uruchamiane za pomocą słowa kluczowego
go. Pozwalają na wykonywanie funkcji asynchronicznie i rywalizację o zasoby. - Kanały służą do bezpiecznej wymiany danych między gorutynami, zapewniając synchronizację i przesyłanie wiadomości.
Równoległość osiąga się poprzez uruchomienie wielu gorutyn, które mogą działać jednocześnie na wielu rdzeniach procesora, jeśli ustawimy GOMAXPROCS.
Przykład:
package main
import (
"fmt"
"time"
)
func worker(id int, ch chan string) {
time.Sleep(time.Second)
ch <- fmt.Sprintf("Pracownik %d zakończony", id)
}
func main() {
ch := make(chan string)
for i := 1; i <= 3; i++ {
go worker(i, ch) // uruchamiamy gorutynę
}
for i := 1; i <= 3; i++ {
msg := <-ch // odbieramy wynik z kanału
fmt.Println(msg)
}
}
W ten sposób Go zapewnia proste i skuteczne narzędzia do pracy z konkurencją i równoległością.