Python

Καινούργιος Global Interpreter Lock (GIL)

Από την έκδοση 3.2 της Python θα έχουμε καινούργιο Global Interpreter Lock (GIL). Η καινούργια έκδοση του GIL φέρνει αρκετές βελτιώσεις σε σχέση με την παλιότερη και προβλήματα που αυτή δημιουργούσε. Χαρακτηριστικά, σε πολυπήρυνους επεξεργαστές ένα πρόγραμμα που χρησιμοποιεί νήματα (threads) μπορούσε να τρέχει πιο αργά από ότι σε μονοπήρυνους, εφόσον η ταχύτητα του ήταν συναρτήσει της επεξεργαστικής ισχύος του μηχανήματος (cpu bounded) και δεν αφορούσε λειτουργίες εισόδου/εξόδου (IO bound). Το παραπάνω παράξενο φαινόμενο είχε τις ρίζες του στα πολλά σήματα (signals) που ανταλλάσαν μεταξύ τους τα νήματα ώστε να μπορέσει να καθοριστεί ποιο θα εκτελεστεί και θα πάρει το GIL, ώστε να εκτελείται αποκλειστικά αυτό.

Το πρόβλημα αυτό βελτιώνεται καθοριστικά στην καινούργια έκδοση, όπου μια καινούργια υλοποίηση λαμβάνει χώρα. Όταν υπάρχουν πάνω από ένα νήματα, ένα νήμα που θέλει να πάρει το GIL ενημερώνει αυτό που τρέχει. Εδώ υπάρχουν δύο περιπτώσεις. Είτε το νήμα που τρέχει θα δώσει εθελοντικά το GIL (επειδή λ.χ κάνει κάποιο I/O) είτε θα το δώσει υποχρεωτικά επειδή πέρασε κάποιο χρονικό διάστημα. Στην δεύτερη περίπτωση, τελειώνει την λειτουργία που έκανε και δίνει υποχρεωτικά το GIL. Όταν αφήνεται το GIL, το thread που το κατείχε, περιμένει ενημέρωση ότι λήφθηκε σωστά από το άλλο thread που το αποκτά τώρα.

Μια σχετική παρουσίαση στα αγγλικά του θέματος μπορείτε να βρείτε στο:
http://www.dabeaz.com/blog/2010/01/presentation-on-new-python-gil.html

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου