Junior — Middle
Hogyan valósul meg a párhuzamos és szekvenciális feladatfeldolgozás a Go nyelvben?
sobes.tech MI
Válasz az MI-től
A Go nyelvben a feladatok párhuzamos feldolgozása goroutine-okon keresztül valósul meg, amelyek könnyű szálak, és a go kulcsszóval indíthatók el. Egy goroutine-t elindíthatunk egy függvény aszinkron végrehajtására, és az párhuzamosan fog futni más goroutine-kkal.
A szekvenciális feldolgozás egyszerűen függvényhívás go nélkül, amikor a feladatok egymás után hajtódnak végre.
Példa párhuzamos feldolgozásra:
package main
import (
"fmt"
"time"
)
func feladat(id int) {
fmt.Printf("Feladat %d elindult\n", id)
time.Sleep(time.Second)
fmt.Printf("Feladat %d befejeződött\n", id)
}
func main() {
for i := 1; i <= 3; i++ {
go feladat(i) // goroutine indítása
}
time.Sleep(2 * time.Second) // várakozás a goroutine-ok befejezésére
}
Ebben a példában három feladat indul párhuzamosan. Ha eltávolítjuk a go-t, a feladatok szekvenciálisan fognak végrehajtódni.
A goroutine-ok szinkronizálására és kezelésére gyakran használnak csatornákat (channels) és sync.WaitGroup-ot.