Sobes.tech
Junior — Middle

Jak zapewniana jest praca i synchronizacja wątków wykonawczych w Golang?

sobes.tech AI

Odpowiedź od AI

W Go, do pracy z wątkami wykonawczymi używa się gorutyn, które są lekkimi wątkami zarządzanymi przez środowisko uruchomieniowe Go. Gorutiny uruchamia się za pomocą słowa kluczowego go przed wywołaniem funkcji, co pozwala na ich asynchroniczne wykonywanie.

Do synchronizacji gorutyn stosuje się kanały (channels) oraz prymitywy z pakietu sync (np. Mutex, WaitGroup). Kanały zapewniają bezpieczną wymianę danych między gorutynami i umożliwiają ich synchronizację.

Przykład użycia gorutyn i kanałów:

package main

import (
    "fmt"
    "time"
)

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

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

Tutaj główna gorutyna uruchamia worker w osobnej gorutynie, która po opóźnieniu wysyła wiadomość do kanału. Główna gorutyna oczekuje na odebranie wiadomości z kanału, co zapewnia synchronizację.