Sobes.tech
Junior — Middle

Kaip galima organizuoti ir valdyti srautų vykdymo seką?

sobes.tech AI

Atsakymas iš AI

Go kalboje, norint organizuoti ir valdyti gorutinių vykdymo seką, naudojami keli pagrindiniai mechanizmai:

  1. Kanalai (channels) — leidžia sinchronizuoti gorutinas, perduodant duomenis tarp jų. Gorutina, skaitanti iš kanalo, lauks, kol kita gorutina nusiųs duomenis, tai užtikrina tvarką.

  2. sync.WaitGroup — naudojamas laukti, kol baigsis gorutinos grupė. Leidžia laukti, kol visos paleistos gorutinos užbaigs darbą.

  3. Mutex ir kiti primitives iš paketo sync — apsaugoti bendrus išteklius ir išvengti lenktynių sąlygų.

Pavyzdys, kaip naudoti kanalus sekciniam vykdymui:

package main

import (
    "fmt"
)

func worker(id int, done chan bool) {
    fmt.Printf("Darbininkas %d pradėjo\n", id)
    // darbo imitacija
    done <- true // pabaigos signalas
}

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

    go worker(1, done)
    <-done // laukiame, kol baigsis darbininkas 1

    go worker(2, done)
    <-done // laukiame, kol baigsis darbininkas 2

    fmt.Println("Visi darbininkai baigė darbą")
}

Taip, naudojant kanalus ir sinchronizaciją, galima valdyti gorutinių vykdymo tvarką.