Sobes.tech
Junior — Middle

Πώς γίνεται η κατανομή των τεσσάρων goroutines στους τέσσερις πυρήνες επεξεργαστή κατά την εκκίνησή τους;

sobes.tech AI

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

Στο Go, ο προγραμματιστής goroutine (Goroutine scheduler) διανέμει τις goroutines μεταξύ των συστημικών νημάτων (M), τα οποία με τη σειρά τους συνδέονται με τους πυρήνες της CPU.

Εάν έχετε 4 goroutines και 4 πυρήνες CPU, κατά την εκκίνηση του προγραμματιστή, μπορεί να διανείμει κάθε goroutine σε διαφορετικό πυρήνα, εξασφαλίζοντας παράλληλη εκτέλεση. Αυτό είναι εφικτό αν η μεταβλητή περιβάλλοντος GOMAXPROCS έχει οριστεί σε 4 (στις σύγχρονες εκδόσεις Go, είναι ίση με τον αριθμό των διαθέσιμων πυρήνων).

Παράδειγμα:

runtime.GOMAXPROCS(4) // ορίζει τον αριθμό των διαθέσιμων νημάτων σε 4

for i := 0; i < 4; i++ {
    go func(id int) {
        fmt.Printf("Goroutine %d ξεκίνησε\n", id)
        // εργασία
    }(i)
}

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