Από την έκδοση 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
Πλέον μπορείτε να βρείτε στο site τις φωτογραφίες από την 7η Συνάντηση μας στο τμήμα Μηχανικών Η/Υ και Πληροφορικής...
Ευχαριστούμε τον Νίκο Νοδαράκη για την παροχή τους!
Λόγω τις πίεσης που υπάρχει αυτή τη περίοδο με την εξεταστική, αποφασίστηκε μετα από συζήτηση στη mailing-list να γίνει μία χαλαρή συνάντηση για ένα καφέ... για τα χρονια πολλά...!
Όσοι πιστοί προσέλθετε, αύριο, Κυριακή, στο τραμ στις 19:00!{mos_fb_discuss:9}
Τελικά μαζευτήκαμε περίπου στα 10 άτομα. Αφού αναφερθήκαμε στις πρόσφατες επιτυχίες του TasPython (άρθρο στο pythonpapers, επίσημη mailing list, παρουσιάσεις από ενδιαφέροντα άτομα), συζητήσαμε τις προοπτικές ανάπτυξης του. Ανάμεσα στα άλλα συζητήθηκαν αρκετά τολμηρές ιδέες για μελλοντικές δράσεις και επέκταση του κύκλου δράσης του TasPython.
Πέρα από αυτά, ενδιαφέρουσες ήταν και συζητήσεις που δεν εφάπτονταν της θεματολογίας περί Python, όπως εμπειρίες με την χρήση λαδιού για την απαγωγή θερμότητας, σύγκριση browsers, συζήτηση περί ανοικτού λογισμικού γενικότερα, εμπειρίες από το πανεπιστήμιο ή τις σχολές μας καθώς και ο τρόπος λειτουργίας άλλων ομάδων. Συζήτηση έγινε και για θέματα που δεν βρίσκονται καν στον ευρύτερο κύκλο της τεχνολογίας.
Στην συνάντηση υπήρχε αρκετό γέλιο, όμως το πιο σημαντικό είναι ότι τελικά γνωριστήκαμε με άτομα που δεν γνωρίζαμε και τόσο καλά, και αποτέλεσε το εύνασμα για έναν κύκλο εξωστρέφειας. Ίσως πρέπει να πυκνώσουμε και αυτές τις συναντήσεις, που δεν αφορούν τεχνικά θέματα με την πιθανή συνοδεία και κανενός επιτραπεζίου (κρίμα που δεν παίξαμε παλέρμο τελικά!)
Παρόντες Αλφαβητικά:
Αλέξανδρος
Γιώργος (gsfak)
Γιώργος (georgep)
Δημήτρης (myle)
Κώστας (sbos-x)
Κωνσταντίνα (orfanou)
Νίκος (aggelidis)
Χρήστος{mos_fb_discuss:9}
Μέχρι τώρα η διαδικασία υιοθέτησης της Python 3 ήταν αρκετά αργή σε ρυθμούς σε σχέση με τις εκδόσεις 2.x που συνεχίζαν την παλιότερη σειρά. Παρότι με την έκδοση 3 της Python εξαλείφονται λάθη του παρελθόντος και γίνεται πιο εύκολο να φανερωθούν πιθανές παραλήψεις κατά την σύνταξη ενός προγράμματος το ότι δεν είναι συμβατή προς τα πίσω, δεν προσφέρει αρκετά κίνητρα για την επιτάχυνση της διαδικασίας αντικατάστασης της σειράς 2.x. Επίσης, είχε παρατηρηθεί ότι σε αρκετές περιπτώσεις προγράμματα σε Python 3 ήταν πιο αργά από ότι σε Python 2. Όλα αυτά όμως θα αλλάξουν σύντομα.
Μια καλύτερη υλοποίηση του Global Interpreter Lock που έχει αποτελέσει σημείο αμφιλεγόμενο για προγράμματα με πολλά νήματα είναι στον δρόμο, ενώ το Unladen Swallow είναι πολύ πιθανό να συγχωνευθεί σύντομα με την κύρια υλοποίηση της Python (CPython). Το Unladen Swallow, που σημαίνει μη φορτωμένο περιστέρι και είναι project της Google, έχει ως σκοπό του την επιτάγχυνση της απόδοσης των προγραμμάτων που γράφονται σε Python.
Για αυτή την αύξηση της ταχύτητας, το Unladen Swallow χρησιμοποιεί την LLVM (Low Level Virtual Machine) ώστε να παράξει ένα JIT (Just in Time) compiler. Τα νέα αυτά είναι καταπληκτικά, γιατί αν κάποιο δει τις αναφορές προόδου για το Unladen Swallow, έχουν γίνει σημαντικά βήματα βελτίωσης της ταχύτητας εκτέλεσης των προγραμμάτων.