Sobes.tech
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 в отделна горутина, която след забавяне изпраща съобщение към канала. Основната горутина чака получаването на съобщението от канала, което осигурява синхронизация.