Junior — Middle
შესაძლებელია თუ არა ერთდროულად მუშაობა ნაკადების რაოდენობაზე შეზღუდვის დაწესება Go ენაში?
sobes.tech AI
პასუხი AI-სგან
Go ენაში პირდაპირი მექანიზმი არ არსებობს ერთდროულად მუშაობს გორუტინების (სუსტი ძაფების) რაოდენობის პირდაპირი შეზღუდვისთვის. შეიძლება იყოს ბევრი გორუტინი, და ისინი მსუბუქია. ერთდროულად მუშაობს გორუტინების რაოდენობის შეზღუდვისთვის, ჩვეულებრივ, იყენებენ სემაფორებს ან შეზღუდული მოცულობის არხებს.
მაგალითი ერთდროულად მუშაობს გორუტინების რაოდენობის შეზღუდვისთვის არხის გამოყენებით:
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
defer wg.Done()
sem <- struct{}{} // ადგილი დაჯავშნა
fmt.Printf("მუშაკი %d დაიწყო\n", id)
time.Sleep(time.Second) // სამუშაო
fmt.Printf("მუშაკი %d დასრულდა\n", id)
<-sem // ადგილი გათავისუფლება
}
func main() {
const maxConcurrent = 3
sem := make(chan struct{}, maxConcurrent) // არხი შეზღუდვით
var wg sync.WaitGroup
for i := 1; i <= 10; i++ {
wg.Add(1)
go worker(i, sem, &wg)
}
wg.Wait()
}
აქ, არხი sem with ბუფერი maxConcurrent შეზღუდავს ერთდროულად მუშაობს გორუტინების რაოდენობას 3-ზე.