Sobes.tech
Junior — Middle

Hogyan lehet szervezni és kezelni a szálak végrehajtási sorrendjét?

sobes.tech MI

Válasz az MI-től

Go nyelven a goroutine-ok végrehajtási sorrendjének szervezéséhez és kezeléséhez több fő mechanizmust használnak:

  1. Csatornák (channels) — lehetővé teszik a goroutine-ok szinkronizálását, adatátvitelt közöttük. Egy goroutine, amely olvas egy csatornából, várni fog, amíg egy másik goroutine adatot küld, ez biztosítja a sorrendet.

  2. sync.WaitGroup — arra szolgál, hogy várjon egy goroutine-csoport befejezésére. Lehetővé teszi, hogy megvárd, amíg az összes indított goroutine befejeződik.

  3. Mutex és más primitívek a sync csomagból — a közös erőforrások védelmére és a versenyhelyzetek elkerülésére.

Példa a csatornák használatára szekvenciális végrehajtáshoz:

package main

import (
    "fmt"
)

func worker(id int, done chan bool) {
    fmt.Printf("Munkás %d elindult\n", id)
    // munka szimulálása
    done <- true // befejezés jelzése
}

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

    go worker(1, done)
    <-done // várakozás az 1-es munkás befejezésére

    go worker(2, done)
    <-done // várakozás a 2-es munkás befejezésére

    fmt.Println("Minden munkás befejeződött")
}

Így a csatornák és a szinkronizáció segítségével kezelhető a goroutine-ok végrehajtási sorrendje.