Ταυτοχρονισμός: Διαφορά μεταξύ των αναθεωρήσεων

Περιεχόμενο που διαγράφηκε Περιεχόμενο που προστέθηκε
μ διαμοιραζόμενοι πόροι -> κοινόχρηστοι πόροι
Γραμμή 1:
[[Αρχείο:Dining philosophers.png|thumb|200px|Το πρόβλημα των συνδαιτυμόνων φιλοσόφων ("Dining Philosophers"), ένα κλασικό πρόβλημα που περιλαμβάνει ταυτοχρονισμό και διαμοιραζόμενουςκοινόχρηστους πόρους]]
 
Στην [[επιστήμη υπολογιστών]], ο '''ταυτοχρονισμός''' ('''concurrency''') είναι η ιδιότητα ενός συστήματος, στο οποίο εκτελούνται ταυτόχρονα πολλοί [[υπολογισμός|υπολογισμοί]], που μπορούν να αλληλεπιδρούν μεταξύ τους. Οι υπολογισμοί μπορεί να εκτελούνται σε πολλούς πυρήνες του ίδιου τσιπ, σαν [[χρονοπρογραμματισμός|χρονοπρογραμματισμένα]] [[Νήμα (υπολογιστές)|νήματα]] στον ίδιο επεξεργαστή, ή σε φυσικά διακριτούς επεξεργαστές.
Γραμμή 6:
 
== Προβλήματα ==
Επειδή οι υπολογισμοί σε ένα ταυτόχρονο σύστημα μπορεί να αλληλεπιδρούν καθώς εκτελούνται, ο αριθμός των πιθανών μονοπατιών εκτέλεσης στο σύστημα μπορεί να είναι πολύ μεγάλος και το τελικό αποτέλεσμα να μην προσδιορίζεται. Η ταυτόχρονη χρήση διαμοιραζόμενωνκοινόχρηστων πόρων μπορεί να προκαλεί αυτήν την απροσδιοριστία, με αποτέλεσμα να προκύπτουν αδιέξοδα (deadlocks) και η λιμοκτονία πόρων (resource starvation).<ref name="cleaveland1996">{{cite journal|last=Cleaveland|first=Rance|coauthors=Scott Smolka|title=Strategic Directions in Concurrency Research|journal=ACM Computing Surveys|volume=28|issue=4|date=December, 1996|url=http://doi.acm.org/10.1145/242223.242252|pages=607|doi=10.1145/242223.242252}}</ref>
 
Η σχεδίαση ταυτόχρονων συστημάτων συχνά απαιτεί τεχνικές συντονισμού της εκτέλεσής τους, ανταλλαγής δεδομένων, δέσμευσης μνήμης και χρονοπρογραμματισμού της εκτέλεσης, ώστε να ελαχιστοποιείται ο χρόνος απόκρισης και να μεγιστοποιείται η απόδοση του συστήματος.
Γραμμή 38:
Ο ταυτόχρονος προγραμματισμός περιλαμβάνει τις γλώσσες προγραμματισμού και τους αλγορίθμους που χρησιμοποιούνται στην υλοποίηση ταυτόχρονων συστημάτων. Ο ταυτόχρονος προγραμματισμός (concurrent programming) συχνά θεωρείται γενικότερος από τον παράλληλο προγραμματισμό (parallel programming) γιατί μπορεί να έχει αυθαίρετες και δυναμικές μορφές επικοινωνίας και αλληλεπίδρασης, ενώ τα παράλληλα συστήματα έχουν συνήθως προκαθορισμένο και καλά δομημένο τρόπο επικοινωνίας. Οι βασικοί σκοποί του ταυτόχρονου προγραμματισμού είναι η ''ορθότητα'' (''correctness''), η ''ταχύτητα'' (''performance'') και η ''ανθεκτικότητα'' (''robustness''). Ταυτόχρονα συστήματα όπως τα [[λειτουργικό σύστημα|λειτουργικά συστήματα]] και τα συστήματα διαχείρισης [[βάση δεδομένων|βάσεων δεδομένων]] γενικά σχεδιάζονται για να εκτελούνται χωρίς χρονικό όριο, με αυτόματη ανάκαμψη από σφάλματα, χωρίς να τερματίζουν απροσδόκητα (δείτε [[Έλεγχος ταυτοχρονισμού]]). Κάποια ταυτόχρονα συστήματα υλοποιούν μια μορφή διαφανούς (transparent) ταυτοχρονισμού, στον οποίο οι ταυτόχρονες υπολογιστικές οντότητες μπορούν να ανταγωνίζονται για έναν πόρο, αλλά οι λεπτομέρειες αυτού του ανταγωνισμού να μη φαίνονται στον προγραμματιστή.
 
Επειδή χρησιμοποιούν διαμοιραζόμενουςκοινόχρηστους πόρους, τα ταυτόχρονα συστήματα γενικά απαιτούν κάποια μορφή διαιτησίας (arbiter) στην υλοποίησή τους (συχνά το ίδιο το υλικό), για να ελέγχεται η πρόσβαση σε αυτούς τους πόρους. Η χρήση διαιτητών εισάγει την πιθανότητα απροσδιοριστίας, που έχει συνέπειες στην πράξη, ειδικά στην ορθότητα και στην ταχύτητα. Για παράδειγμα, η διαιτησία εισάγει μη-ντετερμινισμό χωρίς άνω όριο (unbounded nondeterminism), ο οποίος προκαλεί προβλήματα στον [[έλεγχος μοντέλων|έλεγχο μοντέλων]] γιατί προκύπτει έκρηξη του χώρου των καταστάσεων, σε σημείο που τα μοντέλα μπορεί να έχουν ακόμα και άπειρο αριθμό καταστάσεων.
 
Κάποια μοντέλα ταυτόχρονου προγραμματισμού περιλαμβάνουν συν-διεργασίες (coprocesses) και ντετερμινιστικό ταυτοχρονισμό. Σε αυτά τα μοντέλα, τα νήματα του ελέγχου επιστρέφουν ρητά τις θυρίδες χρόνου που τους δίνονται, είτε στο σύστημα, είτε σε κάποια άλλη διεργασία.