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