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 с буфер maxConcurrent ограничава броя на горутините, които работят едновременно, до 3.