Sobes.tech
Junior — Middle

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

sobes.tech AI

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

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

Ένα κανάλι είναι ένας τύπος αγωγού μέσω του οποίου μπορούν να αποστέλλονται και να λαμβάνονται τιμές. Η αποστολή και η λήψη σε ένα κανάλι μπλοκάρουν τη goroutine μέχρι η άλλη πλευρά να είναι έτοιμη να δεχθεί ή να στείλει δεδομένα, επιτρέποντας αποτελεσματικό συγχρονισμό της εκτέλεσης.

Παράδειγμα ανταλλαγής σημάτων με τη χρήση κανάλι:

package main

import (
    "fmt"
    "time"
)

func worker(done chan bool) {
    fmt.Println("Η εργασία ξεκίνησε")
    time.Sleep(time.Second) // προσομοίωση εργασίας
    fmt.Println("Η εργασία ολοκληρώθηκε")
    done <- true // αποστολή σήματος ολοκλήρωσης
}

func main() {
    done := make(chan bool)
    go worker(done) // εκκίνηση goroutine
    <-done           // αναμονή σήματος ολοκλήρωσης
    fmt.Println("Η κύρια λειτουργία ολοκληρώθηκε")
}

Σε αυτό το παράδειγμα, το κανάλι done χρησιμοποιείται για τη μεταφορά του σήματος ολοκλήρωσης της goroutine worker. Η κύρια λειτουργία μπλοκάρει στην ανάγνωση από το κανάλι μέχρι να λάβει το σήμα, επιτρέποντας σωστό συγχρονισμό της εκτέλεσης.