Junior — Middle
Cum se implementează concurența, asincronia și paralelismul în limbajul Go?
sobes.tech AI
Răspuns de la AI
În Go, concurența, asincronismul și paralelismul sunt implementate folosind goroutines și canale.
- Goroutines sunt fire ușoare care sunt inițiate cu cuvântul cheie
go. Permite executarea funcțiilor asincron și concurența pentru resurse. - Canale sunt utilizate pentru schimbul sigur de date între goroutines, asigurând sincronizarea și transmiterea mesajelor.
Paralelismul se realizează prin lansarea mai multor goroutines care pot fi executate simultan pe mai multe nuclee ale procesorului, dacă se setează GOMAXPROCS.
Exemplu:
package main
import (
"fmt"
"time"
)
func worker(id int, ch chan string) {
time.Sleep(time.Second)
ch <- fmt.Sprintf("Worker %d terminat", id)
}
func main() {
ch := make(chan string)
for i := 1; i <= 3; i++ {
go worker(i, ch) // pornește o goroutine
}
for i := 1; i <= 3; i++ {
msg := <-ch // primește rezultatul din canal
fmt.Println(msg)
}
}
Astfel, Go oferă instrumente simple și eficiente pentru lucrul cu concurența și paralelismul.