Junior — Middle
Jak w języku Go realizowana jest równoległa i sekwencyjna obsługa zadań?
sobes.tech AI
Odpowiedź od AI
W języku Go równoległe przetwarzanie zadań realizuje się za pomocą gorutyn, które są lekkimi wątkami uruchamianymi za pomocą słowa kluczowego go. Gorutynę można uruchomić do wykonania funkcji asynchronicznie, a będzie ona wykonywać się równolegle z innymi gorutynami.
Przetwarzanie sekwencyjne to zwykłe wywołanie funkcji bez użycia go, gdy zadania są wykonywane jedno po drugim.
Przykład przetwarzania równoległego:
package main
import (
"fmt"
"time"
)
func zadanie(id int) {
fmt.Printf("Zadanie %d rozpoczęte\n", id)
time.Sleep(time.Second)
fmt.Printf("Zadanie %d zakończone\n", id)
}
func main() {
for i := 1; i <= 3; i++ {
go zadanie(i) // uruchamia gorutynę
}
time.Sleep(2 * time.Second) // czeka na zakończenie gorutyn
}
W tym przykładzie trzy zadania są uruchamiane równolegle. Jeśli usuniemy go, zadania będą wykonywać się kolejno.
Do synchronizacji i zarządzania gorutynami często używa się kanałów (channels) i sync.WaitGroup.