Sobes.tech
Junior — Middle

Kuidas saab organiseerida ja hallata niitide täitmise järjekorda?

sobes.tech AI

Vastus AI-lt

Go keeles kasutatakse mitmeid peamisi mehhanisme gorutinite täitmise järjekorra korraldamiseks ja juhtimiseks:

  1. Kanalid (channels) — võimaldavad gorutinite sünkroniseerimist, edastades andmeid nende vahel. Gorutiin, mis loeb kanalist, ootab, kuni teine gorutiin saadab andmed, tagades järjekorra.

  2. sync.WaitGroup — kasutatakse gorutinite grupi lõpetamise ootamiseks. See võimaldab oodata, kuni kõik käivitatud gorutined lõpetavad.

  3. Mutex ja teised primitives paketi sync — ühiste ressursside kaitsmiseks ja võistlusolukordade vältimiseks.

Näide kanalite kasutamisest järjestikuseks täitmiseks:

package main

import (
    "fmt"
)

func worker(id int, done chan bool) {
    fmt.Printf("Tööline %d alustas\n", id)
    // töö simulatsioon
    done <- true // lõpetamise signaal
}

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

    go worker(1, done)
    <-done // ootame, kuni tööline 1 lõpetab

    go worker(2, done)
    <-done // ootame, kuni tööline 2 lõpetab

    fmt.Println("Kõik töömehed on lõpetanud")
}

Sellisel viisil saab kanalite ja sünkroniseerimise abil juhtida gorutinite täitmise järjekorda.