Junior — Middle
Go dilində eyni zamanda işləyən axınların sayına məhdudiyyət qoymaq mümkündürmü?
sobes.tech Süni İntellekt
AI-dan cavab
Go dilində, birbaşa işləyən goroutinların (yüngül ipliklərin) sayını məhdudlaşdırmaq üçün daxili mexanizm yoxdur. Çox sayda goroutin ola bilər və onlar yüngüldür. Eyni vaxtda işləyən goroutinların sayını məhdudlaşdırmaq üçün adətən semaforlar və ya məhdud tutuma malik kanallar istifadə olunur.
Kanaldan istifadə edərək eyni vaxtda işləyən goroutinların sayını məhdudlaşdırma nümunəsi:
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
defer wg.Done()
sem <- struct{}{} // Yer ayır
fmt.Printf("İşçi %d başladı\n", id)
time.Sleep(time.Second) // İş
fmt.Printf("İşçi %d bitdi\n", id)
<-sem // Yer boşalt
}
func main() {
const maxConcurrent = 3
sem := make(chan struct{}, maxConcurrent) // Məhdud 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 ilə tamponla, eyni vaxtda işləyən goroutinların sayını 3-ə məhdudlaşdırır.