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.