Sobes.tech
Junior — Middle

Jak zarządzane są wielowątkowości w języku Go?

sobes.tech AI

Odpowiedź od AI

W języku Go zarządzanie wieloma wątkami wykonawczymi odbywa się za pomocą gorutyn. Gorutyna to lekki wątek, który uruchamia się za pomocą słowa kluczowego go przed wywołaniem funkcji. Planista w Go w ramach środowiska uruchomieniowego zarządza wykonywaniem gorutyn, rozdzielając je na wątki systemowe.

Do synchronizacji i wymiany danych między gorutynami często używa się kanałów (channels), które zapewniają bezpieczny transfer danych i zapobiegają warunkom wyścigu.

Przykład uruchomienia dwóch gorutyn:

package main

import (
    "fmt"
    "time"
)

func say(s string) {
    for i := 0; i < 3; i++ {
        fmt.Println(s)
        time.Sleep(100 * time.Millisecond)
    }
}

func main() {
    go say("world") // uruchamia gorutynę
    say("hello")   // jest wykonywana w głównym wątku
}

W tym przykładzie funkcja say jest wywoływana w osobnej gorutynie, co pozwala na równoległe wykonywanie dwóch zadań.