Sobes.tech
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.