Как може да се организира и управлява последователността на изпълнение на нишките?
sobes.tech AI
Отговор от AI
В Go за организиране и управление на последователността на изпълнение на горутините се използват няколко основни механизма:
-
Канали (channels) — позволяват синхронизиране на горутините, пренасяйки данни между тях. Горутината, която чете от канал, ще чака, докато друга горутина не изпрати данни, което гарантира реда.
-
sync.WaitGroup — се използва за очакване на завършването на група горутини. Позволява да се изчака, докато всички стартирани горутини приключат.
-
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("Всички работници са завършили")
}
По този начин, използвайки канали и синхронизация, може да се управлява редът на изпълнение на горутините.