Junior — Middle
Bir proqramda eyni vaxtda işləyən goroutine-lərin sayına məhdudiyyət qoymaq mümkündürmü?
sobes.tech Süni İntellekt
AI-dan cavab
Go dilində, eyni vaxtda işlədilən goroutinların sayına sərt məhdudiyyət qoymaq üçün daxili mexanizm yoxdur. Çox sayda goroutin ola bilər və onların planlaşdırılması və keçidləri Go-ın çalışma vaxtı tərəfindən idarə olunur.
Ancaq, əgər eyni vaxtda işləyən goroutinların sayını məhdudlaşdırmaq istəyirsinizsə (məsələn, resurs istifadəsini nəzarət etmək üçün), semaforlar və ya kanallar istifadə edərək paralelliyi məhdudlaşdıra bilərsiniz.
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"
)
func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
defer wg.Done()
sem <- struct{}{} // resursu ələ keçirmək
fmt.Printf("Goroutine %d işləməyə başladı\n", id)
// ... iş ...
fmt.Printf("Goroutine %d işi bitirdi\n", id)
<-sem // resursu azad etmək
}
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 nümunədə, eyni vaxtda ən çox 5 goroutin işləyəcək.