Sobes.tech
Junior — Middle

Ist es möglich, eine Begrenzung für die gleichzeitig laufenden Threads in der Programmiersprache Go festzulegen?

sobes.tech KI

Antwort von AI

In Go gibt es keinen eingebauten Mechanismus, um die Anzahl der gleichzeitig laufenden Goroutines (leichte Threads) direkt zu beschränken. Es kann viele Goroutines geben, und sie sind leichtgewichtig. Um die Anzahl der gleichzeitig laufenden Goroutines zu begrenzen, verwendet man in der Regel Semaphore oder Kanäle mit begrenzter Kapazität.

Beispiel zur Begrenzung der gleichzeitig laufenden Goroutines mit einem Kanal:

package main

import (
    "fmt"
    "sync"
    "time"
)

func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
    defer wg.Done()
    sem <- struct{}{} // Slot reservieren
    fmt.Printf("Worker %d gestartet\n", id)
    time.Sleep(time.Second) // Arbeit
    fmt.Printf("Worker %d beendet\n", id)
    <-sem // Slot freigeben
}

func main() {
    const maxConcurrent = 3
    sem := make(chan struct{}, maxConcurrent) // Kanal mit Begrenzung
    var wg sync.WaitGroup

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

    wg.Wait()
}

Hier begrenzt der Kanal sem mit Puffergröße maxConcurrent die Anzahl der gleichzeitig laufenden Goroutines auf 3.