Junior — Middle
Vai ir iespējams noteikt limitu vienlaikus darbojošo pavedienu skaitam Go valodā?
sobes.tech AI
Atbilde no AI
Go valodā nav iebūvēta mehānisma tieši ierobežot vienlaikus darbojošo gorutīnu (vieglās pavedienu) skaitu. Var būt ļoti daudz gorutīnu, un tās ir vieglas. Lai ierobežotu vienlaikus darbojošo gorutīnu skaitu, parasti izmanto semaforus vai ar ierobežotu kapacitāti kanālus.
Piemērs, kā ierobežot vienlaikus darbojošo gorutīnu skaitu, izmantojot kanālu:
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
defer wg.Done()
sem <- struct{}{} // Rezervēt vietu
fmt.Printf("Darbinieks %d sāka\n", id)
time.Sleep(time.Second) // Darbs
fmt.Printf("Darbinieks %d beidza\n", id)
<-sem // Atbrīvot vietu
}
func main() {
const maxConcurrent = 3
sem := make(chan struct{}, maxConcurrent) // Kanāls ar ierobežojumu
var wg sync.WaitGroup
for i := 1; i <= 10; i++ {
wg.Add(1)
go worker(i, sem, &wg)
}
wg.Wait()
}
Šeit kanāls sem ar buferi maxConcurrent ierobežo vienlaikus darbojošo gorutīnu skaitu līdz 3.