Sobes.tech
Junior — Middle

Is het mogelijk om een limiet te stellen aan het aantal gelijktijdig uitgevoerde goroutines in een programma?

sobes.tech AI

Antwoord van AI

In de programmeertaal Go is er geen ingebouwd mechanisme om een harde limiet te stellen aan het aantal gelijktijdig gestartde goroutines. Er kunnen heel veel goroutines zijn, en hun planning en schakeling worden beheerd door de Go-runtime.

Als je echter het aantal gelijktijdig uitgevoerde goroutines wilt beperken (bijvoorbeeld om het gebruik van bronnen te controleren), kun je semaforen of kanalen gebruiken om de paralleliteit te beperken.

Voorbeeld van het beperken van het aantal gelijktijdig werkende goroutines met behulp van een kanaal:

package main

import (
    "fmt"
    "sync"
)

func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
    defer wg.Done()
    sem <- struct{}{} // resource verkrijgen
    fmt.Printf("Goroutine %d begint te werken\n", id)
    // ... werk ...
    fmt.Printf("Goroutine %d heeft gewerkt\n", id)
    <-sem // resource vrijgeven
}

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

In dit voorbeeld zullen niet meer dan 5 goroutines gelijktijdig werken.