Junior — Middle
Go dilinde aynı anda çalışan goroutine sayısı sınırını nasıl belirlenir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go dilinde, aynı anda çalışan goroutine sayısını doğrudan sınırlayan yerleşik bir mekanizma yoktur. Ancak, paralellik sınırını kontrol etmek için genellikle semaforlar veya sınırlı kapasiteye sahip kanallar kullanılır.
Bir kanal kullanarak 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 al
fmt.Printf("Goroutine %d çalışmaya başladı\n", id)
time.Sleep(time.Second) // çalışma simülasyonu
fmt.Printf("Goroutine %d çalışma tamamladı\n", id)
<-sem // slotu serbest bırak
}
func main() {
const maxGoroutines = 3
sem := make(chan struct{}, maxGoroutines) // tamponlu kanal, goroutine sayısını sınırlar
var wg sync.WaitGroup
for i := 1; i <= 10; i++ {
wg.Add(1)
go worker(i, sem, &wg)
}
wg.Wait()
}
Bu örnekte, sem adlı kanal, maxGoroutines tamponu ile aynı anda çalışan goroutine sayısını sınırlar. Her goroutine, çalışmaya başlamadan önce kanala boş bir yapı koyar, böylece bir slot kapar ve işi bittikten sonra serbest bırakır. Bu sayede, aynı anda en fazla maxGoroutines goroutine çalışabilir.