Sobes.tech
Junior — Middle

Ինչպե՞ս կարելի է կազմակերպել և կառավարել թելերի կատարման հաջորդականությունը։

sobes.tech AI

Պատասխան AI-ից

Go լեզվում, goroutine-ների կատարողական հաջորդականությունը կազմակերպելու և կառավարելու համար օգտագործվում են մի քանի հիմնական մեխանիզմներ՝

  1. Ցանցեր (channels) — թույլ են տալիս սինխրոնիզացնել goroutine-ները, փոխանցելով տվյալներ նրանց միջև։ Goroutine-ը, որը կարդում է ցանցից, կսպասի, մինչև մյուս goroutine-ն ուղարկի տվյալներ, ինչը ապահովում է հերթականությունը։

  2. sync.WaitGroup — օգտագործվում է goroutine-ների խմբի ավարտին սպասելու համար։ Դա թույլ է տալիս սպասել, մինչև բոլոր սկսված goroutine-ները ավարտվեն։

  3. Mutex և այլ primitives from the sync package — ընդհանուր ռեսուրսների պաշտպանության և մրցակցության կանխարգելման համար։

Օրինակ՝ ցանցերի օգտագործումը հերթական կատարման համար՝

package main

import (
    "fmt"
)

func worker(id int, done chan bool) {
    fmt.Printf("Աշխատող %d սկսեց\n", id)
    // աշխատանքային սիմուլացիա
    done <- true // ավարտի նշան
}

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

    go worker(1, done)
    <-done // սպասում է աշխատողի 1 ավարտին

    go worker(2, done)
    <-done // սպասում է աշխատողի 2 ավարտին

    fmt.Println("Բոլոր աշխատողները ավարտվեցին")
}

Այս կերպ, օգտագործելով ցանցեր և սինխրոնիզացիա, կարելի է կառավարել goroutine-ների կատարողական հերթականությունը։