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