Sobes.tech
Junior — Middle

Как може да се организира и управлява последователността на изпълнение на нишките?

sobes.tech AI

Отговор от AI

В Go за организиране и управление на последователността на изпълнение на горутините се използват няколко основни механизма:

  1. Канали (channels) — позволяват синхронизиране на горутините, пренасяйки данни между тях. Горутината, която чете от канал, ще чака, докато друга горутина не изпрати данни, което гарантира реда.

  2. sync.WaitGroup — се използва за очакване на завършването на група горутини. Позволява да се изчака, докато всички стартирани горутини приключат.

  3. Mutex и други примитиви от пакета sync — за защита на споделените ресурси и предотвратяване на състезателни условия.

Пример за използване на канали за последователно изпълнение:

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("Всички работници са завършили")
}

По този начин, използвайки канали и синхронизация, може да се управлява редът на изпълнение на горутините.