Sobes.tech
Junior — Middle

Lehet-e korlátot szabni a programban egy időben futó goroutine-ok számára?

sobes.tech MI

Válasz az MI-től

A Go nyelvben nincs beépített mechanizmus a párhuzamosan futó goroutine-ok számának szigorú korlátozására. Nagyon sok goroutine lehet, és azok ütemezését és váltását a Go futásideje kezeli.

Azonban, ha szeretnéd korlátozni a párhuzamosan futó goroutine-ok számát (például az erőforrások felhasználásának ellenőrzése érdekében), használhatsz szeminátorokat vagy csatornákat a párhuzamosság korlátozására.

Példa a párhuzamosan futó goroutine-ok számának korlátozására csatorna segítségével:

package main

import (
    "fmt"
    "sync"
)

func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
    defer wg.Done()
    sem <- struct{}{} // erőforrás megszerzése
    fmt.Printf("Goroutine %d elkezdte a munkát\n", id)
    // ... munka ...
    fmt.Printf("Goroutine %d befejezte a munkát\n", id)
    <-sem // erőforrás felszabadítása
}

func main() {
    const maxGoroutines = 5
    sem := make(chan struct{}, maxGoroutines)
    var wg sync.WaitGroup

    for i := 0; i < 20; i++ {
        wg.Add(1)
        go worker(i, sem, &wg)
    }

    wg.Wait()
}

Ebben a példában nem fog több mint 5 goroutine futni egyszerre.