Sobes.tech
Junior — Middle

Μπορεί να οριστεί ένα όριο στον αριθμό των goroutines που τρέχουν ταυτόχρονα σε ένα πρόγραμμα;

sobes.tech AI

Απάντηση από AI

Στη γλώσσα προγραμματισμού Go, δεν υπάρχει ενσωματωμένος μηχανισμός για την καθιέρωση αυστηρού ορίου στον αριθμό των goroutines που ξεκινούν ταυτόχρονα. Μπορεί να υπάρχουν πολλές goroutines, και ο προγραμματισμός και η εναλλαγή τους διαχειρίζεται το runtime του Go.

Ωστόσο, αν θέλετε να περιορίσετε τον αριθμό των goroutines που εκτελούνται ταυτόχρονα (π.χ. για έλεγχο της χρήσης πόρων), μπορείτε να χρησιμοποιήσετε σημαφόρους ή κανάλια για να περιορίσετε τον παραλληλισμό.

Παράδειγμα περιορισμού του αριθμού των ταυτόχρονα λειτουργούντων goroutines με τη χρήση καναλιού:

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 goroutines που λειτουργούν ταυτόχρονα.