Sobes.tech
Junior — Middle

Cum se asigură munca și sincronizarea firelor de execuție în Golang?

sobes.tech AI

Răspuns de la AI

În Go, pentru a lucra cu fire de execuție, se folosesc gorutine, care sunt fire ușoare gestionate de runtime-ul Go. Gorutinele sunt inițiate cu cuvântul cheie go înainte de apelarea unei funcții, ceea ce permite executarea lor asincronă.

Pentru sincronizarea gorutinelor, se utilizează canale (channels) și primitive din pachetul sync (de exemplu, Mutex, WaitGroup). Canalele asigură schimbul sigur de date între gorutine și permit sincronizarea acestora.

Exemplu de utilizare a gorutinelor și canalelor:

package main

import (
    "fmt"
    "time"
)

func worker(ch chan string) {
    time.Sleep(time.Second)
    ch <- "gata"
}

func main() {
    ch := make(chan string)
    go worker(ch)
    msg := <-ch
    fmt.Println("Lucru gorutina:", msg)
}

Aici, gorutina principală pornește worker într-o gorutină separată, care după o întârziere trimite un mesaj în canal. Gorutina principală așteaptă primirea mesajului din canal, asigurând sincronizarea.