Sobes.tech
Junior — Middle

Ako usporiadať a riadiť sled vykonávania vlákien?

sobes.tech AI

Odpoveď od AI

V jazyku Go sa na organizáciu a riadenie poradia vykonávania gorútin používajú niekoľko hlavných mechanizmov:

  1. Kanály (channels) — umožňujú synchronizáciu gorútin, prenášaním dát medzi nimi. Gorutina, ktorá číta z kanála, bude čakať, kým iná gorutina nepošle dáta, čím sa zabezpečí poradie.

  2. sync.WaitGroup — slúži na čakanie na dokončenie skupiny gorútin. Umožňuje počkať, kým všetky spustené gorutiny neskončia.

  3. Mutex a ďalšie primitívy z balíka sync — na ochranu zdieľaných zdrojov a prevenciu závodov.

Príklad použitia kanálov na sekvenčné vykonávanie:

package main

import (
    "fmt"
)

func worker(id int, done chan bool) {
    fmt.Printf("Pracovník %d začal\n", id)
    // simulácia práce
    done <- true // signál o ukončení
}

func main() {
    done := make(chan bool)

    go worker(1, done)
    <-done // čakáme na ukončenie pracovníka 1

    go worker(2, done)
    <-done // čakáme na ukončenie pracovníka 2

    fmt.Println("Všetci pracovníci ukončili")
}

Týmto spôsobom je možné pomocou kanálov a synchronizácie riadiť poradie vykonávania gorútin.