Junior — Middle
Dasturda bir vaqtning o'zida ishga tushiriladigan goroutinelar soniga chegarani belgilash mumkinmi?
sobes.tech AI
AIdan javob
Go tilida, bir vaqtning o'zida ishga tushiriladigan goroutinlar soniga qattiq cheklov qo'yish uchun o'rnatilgan mexanizm mavjud emas. Juda ko'p goroutinlar bo'lishi mumkin va ularning rejalashtirilishi va almashinuvi Go-ning ish vaqti tomonidan boshqariladi.
Ammo, agar siz bir vaqtning o'zida bajarilayotgan goroutinlar sonini cheklashni istasangiz (masalan, resurslardan foydalanishni nazorat qilish uchun), semaforlar yoki kanallar yordamida parallelizmni cheklash mumkin.
Bir kanal yordamida bir vaqtning o'zida ishlayotgan goroutinlar sonini cheklash misoli:
package main
import (
"fmt"
"sync"
)
func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
defer wg.Done()
sem <- struct{}{} // resursni egallash
fmt.Printf("Goroutine %d ish boshladi\n", id)
// ... ish ...
fmt.Printf("Goroutine %d ishni tugatdi\n", id)
<-sem // resursni bo'shatish
}
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()
}
Ushbu misolda, bir vaqtning o'zida 5 dan ortiq goroutinlar ishlamaydi.