Sobes.tech
Junior — Middle

Cum se implementează procesarea paralelă și secvențială a sarcinilor în limbajul Go?

sobes.tech AI

Răspuns de la AI

În Go, procesarea paralelă a sarcinilor se realizează cu ajutorul goroutine-urilor, care sunt fire ușoare inițiate cu cuvântul cheie go. O goroutine poate fi lansată pentru a executa o funcție asincron, iar aceasta va fi executată în paralel cu alte goroutine-uri.

Procesarea secvențială este pur și simplu apelarea funcțiilor fără go, când sarcinile sunt efectuate una după alta.

Exemplu de procesare paralelă:

package main

import (
    "fmt"
    "time"
)

func sarcina(id int) {
    fmt.Printf("Sarcina %d a început\n", id)
    time.Sleep(time.Second)
    fmt.Printf("Sarcina %d s-a terminat\n", id)
}

func main() {
    for i := 1; i <= 3; i++ {
        go sarcina(i) // pornește o goroutine
    }
    time.Sleep(2 * time.Second) // așteaptă finalizarea goroutine-urilor
}

În acest exemplu, trei sarcini sunt lansate în paralel. Dacă se elimină go, sarcinile se vor executa secvențial.

Pentru sincronizare și gestionare a goroutine-urilor, se folosesc adesea canale (channels) și sync.WaitGroup.