Sobes.tech
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.