Junior — Middle
შესაძლებელია თუ არა პროგრამაში ერთდროულად დაწყებული goroutine-ების რაოდენობის შეზღუდვა?
sobes.tech AI
პასუხი AI-სგან
Go ენისში არ არსებობს ინტეგრირებული მექანიზმი, რომელიც მკაცრად განსაზღვრავს ერთდროულად დაწყებული goroutine-ების რაოდენობას. შეიძლება იყოს ძალიან ბევრი goroutine, და მათი დაგეგმვა და გადართვა ხორციელდება Go-ის runtime-ის მიერ.
თუმცა, თუ გსურთ შეზღუდოთ ერთდროულად შესრულებადი goroutine-ების რაოდენობა (მაგალითად, რესურსების გამოყენების კონტროლის მიზნით), შეგიძლიათ გამოიყენოთ სემაფორები ან არხები პარალელიზმის შეზღუდვისთვის.
მაგალითი ერთდროულად მუშაობს goroutine-ების რაოდენობის შეზღუდვის არხის გამოყენებით:
package main
import (
"fmt"
"sync"
)
func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
defer wg.Done()
sem <- struct{}{} // რესურსის მიღება
fmt.Printf("Goroutine %d დაიწყო მუშაობა\n", id)
// ... სამუშაო ...
fmt.Printf("Goroutine %d დასრულდა მუშაობა\n", id)
<-sem // რესურსის გათავისუფლება
}
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()
}
ამ მაგალითში, ერთდროულად მუშაობს მაქსიმუმ 5 goroutine.