Sobes.tech
Junior — Middle

Bir proqramda eyni vaxtda işləyən goroutine-lərin sayına məhdudiyyət qoymaq mümkündürmü?

sobes.tech Süni İntellekt

AI-dan cavab

Go dilində, eyni vaxtda işlədilən goroutinların sayına sərt məhdudiyyət qoymaq üçün daxili mexanizm yoxdur. Çox sayda goroutin ola bilər və onların planlaşdırılması və keçidləri Go-ın çalışma vaxtı tərəfindən idarə olunur.

Ancaq, əgər eyni vaxtda işləyən goroutinların sayını məhdudlaşdırmaq istəyirsinizsə (məsələn, resurs istifadəsini nəzarət etmək üçün), semaforlar və ya kanallar istifadə edərək paralelliyi məhdudlaşdıra bilərsiniz.

Kanaldan istifadə edərək eyni vaxtda işləyən goroutinların sayını məhdudlaşdırma nümunəsi:

package main

import (
    "fmt"
    "sync"
)

func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
    defer wg.Done()
    sem <- struct{}{} // resursu ələ keçirmək
    fmt.Printf("Goroutine %d işləməyə başladı\n", id)
    // ... iş ...
    fmt.Printf("Goroutine %d işi bitirdi\n", id)
    <-sem // resursu azad etmək
}

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()
}

Bu nümunədə, eyni vaxtda ən çox 5 goroutin işləyəcək.