Sobes.tech
Junior — Middle

Ist es möglich, eine Grenze für die Anzahl der gleichzeitig laufenden Goroutines in einem Programm festzulegen?

sobes.tech KI

Antwort von AI

In der Programmiersprache Go gibt es keinen eingebauten Mechanismus, um eine harte Begrenzung für die Anzahl gleichzeitig laufender Goroutines festzulegen. Es kann sehr viele Goroutines geben, und deren Planung und Umschaltung werden vom Go-Runtime übernommen.

Wenn jedoch die Anzahl der gleichzeitig laufenden Goroutines (z.B. zur Ressourcensteuerung) beschränkt werden soll, können Semaphore oder Kanäle verwendet werden, um die Parallelität zu begrenzen.

Beispiel zur Begrenzung der gleichzeitig laufenden Goroutines mit einem Kanal:

package main

import (
    "fmt"
    "sync"
)

func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
    defer wg.Done()
    sem <- struct{}{} // Ressource erwerben
    fmt.Printf("Goroutine %d hat mit der Arbeit begonnen\n", id)
    // ... Arbeit ...
    fmt.Printf("Goroutine %d hat die Arbeit beendet\n", id)
    <-sem // Ressource freigeben
}

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 diesem Beispiel arbeiten höchstens 5 Goroutines gleichzeitig.