Sobes.tech
Junior — Middle

Kako se obezbeđuje rad i sinhronizacija niti izvršenja u Golang?

sobes.tech АИ

Одговор од АИ

У Go-у, за рад са радним токовима користе се горутинес — лагане токове које управља runtime Go. Горутинес се покрећу са кључном речи 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 у посебној горутинес, која након кашњења шаље поруку у канал. Главна горутинес чека да прими поруку из канала, што обезбеђује синхронизацију.