Sobes.tech
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.