Sobes.tech
Junior — Middle

Bir programda aynı anda çalışan goroutine 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 sayısına katı sınır koymak için yerleşik bir mekanizma yoktur. Çok sayıda goroutine olabilir ve planlama ile geçişleri Go çalışma zamanı tarafından yönetilir.

Ancak, eğer aynı anda çalışan goroutine sayısını sınırlamak (örneğin, kaynak kullanımını kontrol etmek için) istiyorsanız, semaforlar veya kanallar kullanarak paralelliği sınırlayabilirsiniz.

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

package main

import (
    "fmt"
    "sync"
)

func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
    defer wg.Done()
    sem <- struct{}{} // kaynak edin
    fmt.Printf("Goroutine %d çalışmaya başladı\n", id)
    // ... çalışma ...
    fmt.Printf("Goroutine %d çalışma tamamlandı\n", id)
    <-sem // kaynağı serbest bırak
}

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

Bu örnekte, aynı anda en fazla 5 goroutine çalışacaktır.