Sobes.tech
Junior — Middle

Jak je v jazyce Go implementováno paralelní a sekvenční zpracování úkolů?

sobes.tech AI

Odpověď od AI

V jazyce Go se paralelní zpracování úkolů realizuje pomocí gorutin, což jsou lehké vlákna, která se spouštějí klíčovým slovem go. Gorutina může být spuštěna pro asynchronní provedení funkce a bude běžet paralelně s ostatními gorutinami.

Sekvenční zpracování je jednoduché volání funkcí bez použití go, kdy se úkoly vykonávají jeden po druhém.

Příklad paralelního zpracování:

package main

import (
    "fmt"
    "time"
)

func úkol(id int) {
    fmt.Printf("Úkol %d začal\n", id)
    time.Sleep(time.Second)
    fmt.Printf("Úkol %d dokončen\n", id)
}

func main() {
    for i := 1; i <= 3; i++ {
        go úkol(i) // spouštíme gorutinu
    }
    time.Sleep(2 * time.Second) // čekáme na dokončení gorutin
}

V tomto příkladu jsou tři úkoly spuštěny paralelně. Pokud odstraníme go, budou se úkoly vykonávat sekvenčně.

Pro synchronizaci a správu gorutin se často používají kanály (channels) a sync.WaitGroup.