Livelock: Τι είναι, Παράδειγμα, Διαφορά με το Αδιέξοδο
⚡ Έξυπνη Σύνοψη
Το Livelock είναι μια κατάσταση ταυτόχρονης λειτουργίας όπου οι διεργασίες αλλάζουν συνεχώς την κατάστασή τους σε απόκριση η μία στην άλλη, αλλά δεν σημειώνουν πραγματική πρόοδο, παραμένοντας ενεργές και καταναλώνοντας κύκλους CPU χωρίς ποτέ να ολοκληρώνουν τις εργασίες τους ή να μπλοκάρονται.

Τι είναι το Livelock;
A livelock είναι μια κατάσταση όπου ένα αίτημα για αποκλειστική κλειδαριά απορρίπτεται επανειλημμένα, καθώς πολλά αλληλεπικαλύπτονταιping Τα κοινόχρηστα κλειδώματα συνεχίζουν να αλληλεπιδρούν. Οι διεργασίες αλλάζουν συνεχώς την κατάστασή τους, γεγονός που τις εμποδίζει να ολοκληρώσουν την εργασία.
Παραδείγματα Livelock
Παράδειγμα 1:
Το πιο εύκολο παράδειγμα του Livelock είναι δύο άτομα που συναντιούνται πρόσωπο με πρόσωπο σε έναν διάδρομο και και οι δύο μετακινούνται στην άκρη για να αφήσουν τον άλλον να περάσει. Συνεχίζουν να κινούνται από τη μία πλευρά στην άλλη χωρίς να σημειώνουν καμία πρόοδο επειδή κινούνται προς την ίδια κατεύθυνση ταυτόχρονα. Εδώ, δεν διασταυρώνονται ποτέ.
Παράδειγμα 2:
Στην παραπάνω εικόνα, καθεμία από τις δύο διεργασίες χρειάζεται δύο πόρους και χρησιμοποιούν πρωτόγονη polling για να προσπαθήσουν να αποκτήσουν τα κλειδώματα που χρειάζονται. Εάν μια προσπάθεια αποτύχει, η μέθοδος προσπαθεί ξανά.
- Η διεργασία Α διατηρεί τον πόρο Υ
- Η διαδικασία Β περιέχει τον πόρο Χ
- Η διαδικασία Α απαιτεί πόρο Χ.
- Η διεργασία Β απαιτεί πόρο Υ
Ας υποθέσουμε ότι η διεργασία Α εκτελείται πρώτη και αποκτά τον πόρο Χ και, στη συνέχεια, η διεργασία Β εκτελείται και αποκτά τον πόρο Υ. Ανεξάρτητα από το ποια διεργασία εκτελείται πρώτη, καμία από αυτές δεν σημειώνει περαιτέρω πρόοδο.
Ωστόσο, καμία από τις δύο διεργασίες δεν μπλοκάρεται. Χρησιμοποιούν επανειλημμένα πόρους της CPU χωρίς να σημειώνουν καμία πρόοδο, ωστόσο δεν σταματούν ποτέ για ένα μπλοκ επεξεργασίας.
Συνεπώς, η κατάσταση αυτή δεν αποτελεί αδιέξοδο, επειδή καμία διεργασία δεν είναι μπλοκαρισμένη. Αντίθετα, αντιμετωπίζουμε μια κατάσταση ισοδύναμη με αδιέξοδο, η οποία ονομάζεται LIVELOCK.
Τι οδηγεί στο Livelock;
Το Livelock συνδέεται με τον αριθμό των διεργασιών που επιτρέπει ένα σύστημα, ο οποίος ορίζεται από τον συνολικό αριθμό καταχωρήσεων στον πίνακα διεργασιών. Αυτές οι θέσεις στον πίνακα διεργασιών αντιμετωπίζονται επομένως ως πεπερασμένοι πόροι. Όταν οι διεργασίες προσπαθούν επανειλημμένα να χρησιμοποιήσουν αυτούς τους περιορισμένους πόρους, ενώ παράλληλα υποχωρούν συνεχώς η μία στην άλλη, καμία από αυτές δεν σημειώνει πρόοδο και το σύστημα εισέρχεται σε livelock.
Τι είναι το Deadlock;
A αδιέξοδο είναι μια κατάσταση που προκύπτει σε ένα λειτουργικό σύστημα όταν μια διεργασία εισέρχεται σε κατάσταση αναμονής επειδή μια άλλη διεργασία αναμονής κρατά τον ζητούμενο πόρο. Το αδιέξοδο είναι ένα συνηθισμένο πρόβλημα στην πολυεπεξεργασία, όπου πολλές διεργασίες μοιράζονται έναν συγκεκριμένο τύπο αμοιβαία αποκλειόμενου πόρου, γνωστό ως soft lock ή λογισμικό.
Παράδειγμα Αδιεξόδου
- Ένα παράδειγμα από τον πραγματικό κόσμο θα ήταν η κυκλοφορία που κινείται μόνο προς μία κατεύθυνση.
- Εδώ, μια γέφυρα θεωρείται πόρος.
- Όταν προκύπτει αδιέξοδο, μπορεί να λυθεί εύκολα αν ένα αυτοκίνητο κάνει όπισθεν (προλάβει τους πόρους και κάνει κύλιση προς τα πίσω).
- Σε περίπτωση αδιεξόδου ενδέχεται να χρειαστεί να λάβετε αντίγραφα ασφαλείας για πολλά αυτοκίνητα.
- Επομένως, η πείνα είναι πιθανή.
Παράδειγμα Αδιεξόδου
Τι είναι η πείνα;
Η λιμοκτονία είναι μια κατάσταση όπου οι διεργασίες χαμηλής προτεραιότητας μπλοκάρονται ενώ οι διεργασίες υψηλής προτεραιότητας προχωρούν. Σε οποιοδήποτε σύστημα, τα αιτήματα για πόρους υψηλής και χαμηλής προτεραιότητας συνεχίζουν να συμβαίνουν δυναμικά. Επομένως, απαιτείται κάποια πολιτική για να αποφασιστεί ποιος εξυπηρετείται και πότε.
Με ορισμένους αλγόριθμους, ορισμένες διεργασίες ενδέχεται να μην λαμβάνουν την επιθυμητή υπηρεσία, παρόλο που δεν βρίσκονται σε αδιέξοδο. Η στασιμότητα συμβαίνει όταν ορισμένα νήματα καθιστούν τους κοινόχρηστους πόρους μη διαθέσιμους για μεγάλο χρονικό διάστημα.
Παράδειγμα πείνας
Για παράδειγμα, ένα αντικείμενο προσφέρει μια συγχρονισμένη μέθοδο που είναι πιθανό να χρειαστεί πολύ χρόνο για να επιστρέψει. Εάν ένα νήμα χρησιμοποιεί αυτήν τη μέθοδο συχνά, άλλα νήματα που χρειάζονται επίσης συχνή συγχρονισμένη πρόσβαση στο ίδιο αντικείμενο συχνά μπλοκάρονται.
Διαφορά μεταξύ Deadlock, Starvation και Livelock
- Ένα αδιέξοδο είναι μια κατάσταση που προκύπτει σε ένα λειτουργικό σύστημα όταν μια διεργασία εισέρχεται σε κατάσταση αναμονής επειδή ο ζητούμενος πόρος κρατείται από μια άλλη διεργασία σε αναμονή.
- Ένα livelock, από την άλλη πλευρά, είναι σχεδόν παρόμοιο με ένα αδιέξοδο, εκτός από το ότι οι καταστάσεις των διεργασιών που εμπλέκονται σε ένα livelock συνεχίζουν να αλλάζουν σε απόκριση η μία στην άλλη, χωρίς καμία να προοδεύει.
- Έτσι, το livelock είναι μια μοναδική περίπτωση έλλειψης πόρων.


