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