Junior
Τι είναι οι goroutines;
sobes.tech AI
Απάντηση από AI
Ελαφριά νήματα εκτέλεσης, που διαχειρίζεται το περιβάλλον εκτέλεσης του Go. Δημιουργούνται με τη λέξη-κλειδί go πριν από την κλήση μιας συνάρτησης.
Κύχα χαρακτηριστικά:
- Μικρότερη κατανάλωση μνήμης: Το goroutine ξεκινά με ένα μικρό στοίβα (συνήθως 2 KB), που μπορεί να αυξηθεί ή να μειωθεί δυναμικά.
- Ταχύτερη δημιουργία: Η δημιουργία ενός goroutine είναι πολύ πιο γρήγορη από τη δημιουργία ενός συστημικού νήματος.
- Πολλαπλεξία σε συστημικά νήματα: Πολλά goroutines μπορούν να πολλαπλεξούν σε λιγότερα συστημικά νήματα από τον προγραμματιστή του Go.
- Συνεργατικός προγραμματισμός: Τα goroutines δεν διακόπτονται προληπτικά; παραχωρούν εθελοντικά τον έλεγχο στον προγραμματιστή (π.χ., σε μπλοκαρισμένες κλήσεις ή ρητές κλήσεις
runtime.Gosched()).
Παράδειγμα δημιουργίας:
package main
import (
"fmt"
"time"
)
func sayHello() {
fmt.Println("Γειά από το goroutine!")
}
func main() {
go sayHello() // Εκτελεί το sayHello ως goroutine
fmt.Println("Γειά από τη βασική λειτουργία!")
time.Sleep(1 * time.Second) // Για να μην τερματίσει νωρίτερα η βασική λειτουργία από το goroutine
}
Σύγκριση με νήματα:
| Χαρακτηριστικό | Goroutines του Go | Νήματα του λειτουργικού συστήματος |
|---|---|---|
| Διαχείριση | Περιβάλλον εκτέλεσης του Go | Λειτουργικό σύστημα |
| Κατανάλωση μνήμης | Χαμηλή, δυναμική στοίβα | Υψηλή, σταθερή στοίβα |
| Δημιουργία | Γρήγορη | Αργή |
| Προγραμματισμός | Συνεργατικός | Προληπτικός |
| Συγχρονισμός | Κάναλες, πακέτο sync | Μηχανισμοί mutex, σεμάφορων OS |