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ń.