Sobes.tech
Junior — Middle

Is het mogelijk om een limiet te stellen aan het aantal gelijktijdig werkende threads in de Go-taal?

sobes.tech AI

Antwoord van AI

In Go is er geen ingebouwd mechanisme om het aantal gelijktijdig werkende goroutines (lichte draden) direct te beperken. Er kunnen veel goroutines zijn, en ze zijn lichtgewicht. Om het aantal gelijktijdig werkende goroutines te beperken, worden meestal semaforen of kanalen met beperkte capaciteit gebruikt.

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

package main

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

func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
    defer wg.Done()
    sem <- struct{}{} // Reserveren van een plek
    fmt.Printf("Werker %d gestart\n", id)
    time.Sleep(time.Second) // Werk
    fmt.Printf("Werker %d klaar\n", id)
    <-sem // Vrijmaken van een plek
}

func main() {
    const maxConcurrent = 3
    sem := make(chan struct{}, maxConcurrent) // Kanaal met limiet
    var wg sync.WaitGroup

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

    wg.Wait()
}

Hier beperkt het kanaal sem met een buffer van maxConcurrent het aantal gelijktijdig werkende goroutines tot 3.