Παράλληλα και κατανεμημένα συστήματα: Διαφορά μεταξύ των αναθεωρήσεων

Περιεχόμενο που διαγράφηκε Περιεχόμενο που προστέθηκε
JohnMad (συζήτηση | συνεισφορές)
μΧωρίς σύνοψη επεξεργασίας
JohnMad (συζήτηση | συνεισφορές)
Γραμμή 163:
Η επικοινωνία χαμηλού επιπέδου μεταξύ δύο υπολογιστών προγραμματιστικά επιτυγχάνεται μέσω κατάλληλων κλήσεων συστήματος (έστω <code>send()</code> και <code>recv()</code>, από το API των υποδοχών που παρέχει το λειτουργικό σύστημα για διαδιεργασιακή επικοινωνία μέσω δικτύου), οι οποίες μπορούν να λειτουργήσουν είτε '''ανασταλτικά''' είτε '''μη ανασταλτικά'''. Στην ανασταλτική επικοινωνία οι διεργασίες που λαμβάνουν ή αποστέλλουν στο δίκτυο τίθενται σε αναμονή μέχρι να ληφθούν ή να αποσταλλούν αντίστοιχα δεδομένα (π.χ. αφαιρούνται από την ουρά χρονοπρογραμματισμού). Αντιθέτως στη μη ανασταλτική επικοινωνία η <code>send()</code> μπορεί να επιστρέψει τον έλεγχο στη διεργασία που την κάλεσε προτού ολοκληρωθεί η αποστολή, ενώ η <code>recv()</code> μπορεί επίσης να επιστρέψει προτού ληφθεί κάτι και όταν ληφθούν πραγματικά δεδομένα η διεργασία να ειδοποιηθεί ασύγχρονα (π.χ. με ένα [[σήμα (υπολογιστές)|σήμα]]). Η ανασταλτική επικοινωνία είναι ευκολότερη στον προγραμματισμό και οδηγεί σε ασφαλέστερες εφαρμογές αλλά μειονεκτεί σε ταχύτητα. Η μη ανασταλτική επικοινωνία προσφέρει παραλληλισμό (αφού μία διεργασία μπορεί να συνεχίσει να εκτελείται προτού ολοκληρωθεί η επικοινωνία) με αυξημένο κόστος προγραμματιστικής δυσκολίας.
 
Επίσης η επικοινωνία μπορεί να είναι '''αποθηκευόμενη''', με τον πυρήνα του λειτουργικού συστήματος σε κάθε υπολογιστή να διατηρεί μία προσωρινή μνήμη για κάθε διεργασία (όπου αποθηκεύει δεδομένα που του εστάλησαν με προορισμό την αντίστοιχη διεργασία) και την εφαρμογή να αφαιρεί μηνύματα από αυτήν την προσωρινή μνήμη κάθε φορά που καλεί τη <code>recv()</code>, ή '''μη αποθηκευόμενη''', όπου κάθε παραλήπτης θα πρέπει να καλέσει τη <code>recv()</code> με ειδικό όρισμα, το οποίο ορίζει μία προσωρινή μνήμη στον χώρο του χρήστη όπου θα αποθηκευτούν τα ληφθέντα δεδομένα, προτού κάποιος αποστολέας του αποστείλει τα τελευταία. Στο μοντέλο πελάτη / διακομιστή υπάρχει ακόμη και το ζήτημα της αξιοπιστίας, αφού οι αιτήσεις ή οι απαντήσεις μπορεί να χαθούν σε αναξιόπιστα κανάλια. Το πρόβλημα αντιμετωπίζεται συνήθως με επιβεβαιώσεις και ακολουθιακούς αριθμούς των μηνυμάτων / πακέτων στο επίπεδο μεταφοράς.
 
Στο μοντέλο πελάτη / διακομιστή εμφανίζονται δύο ζητήματα που πρέπει να αντιμετωπιστούν: η αρχιτεκτονική εξυπηρέτησης που προσφέρουν και η κλιμακωσιμότητα τους. Η αρχιτεκτονική μπορεί να είναι είτε ακολουθιακή, όπου κάθε φορά εξυπηρετείται ένας πελάτης σειριακά, είτε παράλληλη, όπου ο διακομιστής δημιουργεί νέα διεργασία ή νέο νήμα για την εξυπηρέτηση κάθε πελάτη και ο χρονοπρογραμματιστής του λειτουργικού του συστήματος αναλαμβάνει την ταυτόχρονη λειτουργία τους. Η αύξηση της κλιμακωσιμότητας επιτυγχάνεται με προσθήκη κρυφής μνήμης, χρήση ισχυρότερου υπολογιστή (π.χ. με περισσότερους επεξεργαστές), κατανομή των δεδομένων ή / και των αλγορίθμων σε πολλαπλούς διακομιστές κλπ. Αντί για το μοντέλο πελάτη / διακομιστή όμως μπορεί να αξιοποιηθεί ένα μοντέλο [[peer to peer|ομότιμης επικοινωνίας]], όπου όλοι οι κόμβοι είναι ισότιμοι και μπορούν να λειτουργούν τόσο ως πελάτες όσο και ως διακομιστές. Έτσι η προσθήκη περισσότερων κόμβων σε μία ομότιμη εφαρμογή ανταλλαγής και διαμοιρασμού αρχείων μέσω Διαδικτύου (π.χ. [[eMule]]) αυξάνει στην πραγματικότητα την κλιμακωσιμότητα του ολικού συστήματος (αφού με κάθε νέο κόμβο που συμμετέχει προστίθενται νέες συνδέσεις στο λογικό [[δίκτυο επικάλυψης]] της εφαρμογής, όπως και περισσότερος αποθηκευτικός χώρος), ενώ η προσθήκη περισσότερων πελατών που αναμένουν την εξυπηρέτησή τους από έναν διακομιστή μεταφοράς αρχείων (π.χ. [[FTP]]) οδηγεί σταδιακά στον κορεσμό του τελευταίου, αφού το σύστημα χαρακτηρίζεται από στατική κλιμακωσιμότητα.