Sobes.tech
Junior — Middle

Go dilinde aynı anda çalışan akışların sayısına sınır koymak mümkün mü?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go dilinde, aynı anda çalışan goroutine'lerin (hafif iş parçacıkları) sayısını doğrudan sınırlayan yerleşik bir mekanizma yoktur. Çok sayıda goroutine olabilir ve bunlar hafiftir. Aynı anda çalışan goroutine sayısını sınırlamak için genellikle semaforlar veya sınırlı kapasiteye sahip kanallar kullanılır.

Bir kanalla aynı anda çalışan goroutine sayısını sınırlama örneği:

package main

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

func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
    defer wg.Done()
    sem <- struct{}{} // Slot yakala
    fmt.Printf("İşçi %d başladı\n", id)
    time.Sleep(time.Second) // İş
    fmt.Printf("İşçi %d bitti\n", id)
    <-sem // Slot serbest bırak
}

func main() {
    const maxConcurrent = 3
    sem := make(chan struct{}, maxConcurrent) // Sınırlı kanal
    var wg sync.WaitGroup

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

    wg.Wait()
}

Burada, sem kanalı, maxConcurrent tamponuyla, aynı anda çalışan goroutine sayısını 3 ile sınırlar.