Sobes.tech
Junior — Middle

Hogyan biztosítja a Golang a végrehajtási szálak munkáját és szinkronizációját?

sobes.tech MI

Válasz az MI-től

Go nyelvben a végrehajtási szálakkal való munka során goroutine-okat használunk, amelyek könnyű szálak, amelyeket a Go futásideje kezel. A goroutine-okat a go kulcsszóval indítjuk egy függvényhívás előtt, ami lehetővé teszi azok aszinkron végrehajtását.

A goroutine-ok szinkronizálására csatornákat (channels) és a sync csomag primitívjeit (pl. Mutex, WaitGroup) használunk. A csatornák biztonságos adatcserét tesznek lehetővé a goroutine-ok között, és lehetővé teszik azok szinkronizálását.

Goroutine-ok és csatornák használatának példája:

package main

import (
    "fmt"
    "time"
)

func worker(ch chan string) {
    time.Sleep(time.Second)
    ch <- "kész"
}

func main() {
    ch := make(chan string)
    go worker(ch)
    msg := <-ch
    fmt.Println("Goroutine munka:", msg)
}

Ebben a példában a fő goroutine elindítja a worker függvényt egy külön goroutine-ban, amely késleltetés után üzenetet küld a csatornára. A fő goroutine várja az üzenet fogadását a csatornán, ez biztosítja a szinkronizációt.