Junior — Middle
Как се осигурява работата и синхронизацията на нишките за изпълнение в Golang?
sobes.tech AI
Отговор от AI
В Go за работа с изпълнителни потоци се използват горутините, които са леки потоци, управлявани от Go runtime. Горутините се стартират с ключовата дума go преди извикването на функция, което позволява тяхното асинхронно изпълнение.
За синхронизиране на горутините се използват канали (channels) и примитиви от пакета sync (например, Mutex, WaitGroup). Каналите осигуряват безопасен обмен на данни между горутините и позволяват тяхната синхронизация.
Пример за използване на горутини и канали:
package main
import (
"fmt"
"time"
)
func worker(ch chan string) {
time.Sleep(time.Second)
ch <- "готово"
}
func main() {
ch := make(chan string)
go worker(ch)
msg := <-ch
fmt.Println("Работа на горутината:", msg)
}
Тук, основната горутина стартира worker в отделна горутина, която след забавяне изпраща съобщение към канала. Основната горутина чака получаването на съобщението от канала, което осигурява синхронизация.