Sobes.tech
Junior — Middle

Je možné nastaviť limit na počet súčasne spustených gorútín v programe?

sobes.tech AI

Odpoveď od AI

V jazyku Go neexistuje zabudovaný mechanizmus na nastavenie pevného limitu počtu súčasne spustených gorutín. Môže ich byť veľmi veľa a ich plánovanie a prepínanie zabezpečuje runtime Go.

Ak však chcete obmedziť počet gorutín, ktoré sa vykonávajú súčasne (napríklad na kontrolu využívania zdrojov), môžete použiť semafory alebo kanály na obmedzenie paralelizmu.

Príklad obmedzenia počtu súčasne pracujúcich gorutín pomocou kanála:

package main

import (
    "fmt"
    "sync"
)

func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
    defer wg.Done()
    sem <- struct{}{} // získanie zdroja
    fmt.Printf("Gorutina %d začala pracovať\n", id)
    // ... práca ...
    fmt.Printf("Gorutina %d ukončila prácu\n", id)
    <-sem // uvoľnenie zdroja
}

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()
}

V tomto príklade nebude pracovať viac ako 5 gorutín súčasne.