Αποστολή Python: GIL προαιρετική
Το Συντονιστικό Συμβούλιο έχει προβεί μια τεράστια ανακοίνωση σχετικά με το μέλλον της Python. Συγκεκριμένα, αποφάσισαν να κάνουν το Global Interpreter Lock (GIL) προαιρετικό στο CPython και τελικά να καταργήσουν το GIL εντελώς.
Πρόκειται για μια τεράστια απόφαση που θα αλλάξει ριζικά την Python.
Ως εκ τούτου, σε αυτή τη θέση, θα εξετάσω τι είναι η GIL, τα πλεονεκτήματα και τα μειονεκτήματά της και τι επιφυλάσσει το μέλλον.
Η GIL
Επιτρέψτε μου να περάσω από το Global Interpreter Lock μία λέξη κάθε φορά με αντίστροφη σειρά, ξεκινώντας με κλειδαριά και στη συνέχεια διερμηνέας και τέλος, παγκόσμιο.
Το κλείδωμα είναι ένας μηχανισμός που επιτρέπει την εκτέλεση ενός μόνο νήματος κάθε φορά. Έτσι, όταν ένα νήμα αποκτήσει το κλείδωμα, αποκτά αποκλειστική πρόσβαση στον διερμηνέα της Python.
Ένα διερμηνέας είναι το πρόγραμμα για την εκτέλεση κώδικα Python.
Η λέξη "global" εδώ αναφέρεται στην εμβέλεια του κλειδώματος του διερμηνέα. Επειδή το κλείδωμα του διερμηνέα είναι παγκόσμιο, εγγυάται ότι μόνο ένα νήμα εκτελεί κώδικα Python κάθε φορά μέσα σε μια διεργασία.
Έτσι, το GIL είναι ένας μηχανισμός που εμποδίζει την ταυτόχρονη εκτέλεση πολλαπλών νημάτων μέσω του διερμηνέα. Αλλά γιατί να το θέλετε αυτό;
Πλεονεκτήματα
Το κύριο πλεονέκτημα του GIL είναι ότι διευκολύνει τα πράγματα. Η διαχείριση της μνήμης είναι ευκολότερη, η διαχείριση των νημάτων είναι συνεπώς ευκολότερη και η δημιουργία ενοτήτων είναι συνεπώς ευκολότερη.
Χωρίς το GIL, μπορείτε γρήγορα να αντιμετωπίσετε προβλήματα με το multithreading. Αν δεν τοποθετήσετε τα κατάλληλα τοπικά κλειδώματα για κάθε νήμα, μπορεί να καταλήξετε να καταρρεύσει η Python ή να καταστραφεί κάποια άλλη μνήμη στον υπολογιστή.
Και αν δεν χρησιμοποιείτε πολυνηματικούς επεξεργαστές, τότε η GIL είναι εξαιρετικά χρήσιμη, επειδή διατηρεί την ομαλή λειτουργία των πάντων.
Έτσι, το GIL διατηρεί τα πράγματα απλά και ασφαλή.
Τότε γιατί να μην το θέλετε αυτό;
Μειονεκτήματα
Το αντιστάθμισμα εδώ είναι η ευκολία έναντι της ταχύτητας.
Αποτρέποντας την πολυνηματικότητα, το GIL κάνει την CPython πιο αργή και λιγότερο αποδοτική από ορισμένες άλλες γλώσσες (όπως η C++, η Go και η Rust).
Ειδικά με την έκρηξη της τεχνητής νοημοσύνης τους τελευταίους μήνες, το GIL γίνεται όλο και περισσότερο πρόβλημα στην εκτέλεση προγραμμάτων γρήγορα και αποτελεσματικά.
Το μέλλον του GIL
Έτσι, τώρα που το Διοικητικό Συμβούλιο ανακοίνωσε ότι αποδέχθηκε το Python Enhancement Proposal (PEP) 703, γραμμένο από τον Sam Gross, μπαίνουμε σε αχαρτογράφητα νερά.
Αμέτρητες επεκτάσεις έχουν γραφτεί με γνώμονα το GIL. Όλα τα πρότυπα που έχουν οριστεί με την CPython εξαρτώνται από το GIL. Όλοι χτίζουν στην CPython με το GIL στο κέντρο των προγραμμάτων τους (είτε σκόπιμα είτε όχι).
Έτσι, το Διοικητικό Συμβούλιο καθιστά αρχικά το GIL προαιρετικό, αλλά μακροπρόθεσμα σχεδιάζει να το καταργήσει εντελώς.
Όπως αναφέρουν στην ανάρτηση, "Δεν θέλουμε να δημιουργήσουμε ένα μόνιμο διαχωρισμό μεταξύ των builds με και χωρίς GIL (και των μονάδων επέκτασης)".
Αυτό θα μεταμορφώσει απόλυτα την Python και, ίσως το πιο ενδιαφέρον, με τρόπους που κανείς δεν γνωρίζει ακόμα. Brett Cannon, σε μια δημοσκόπηση προς την ομάδα ανάπτυξης του πυρήνα, έγραψε ότι "το να γίνει η Python free-threaded... έχει πολλούς άγνωστους παράγοντες. Δεν ξέρουμε πόσος κώδικας βασίζεται σιωπηρά στο GIL, ή δεν είναι ασφαλής για νήματα με λεπτούς τρόπους που αποκρύπτονται από το GIL".
Το GIL εξαφανίζεται - τι θα πάρει μαζί του;
Και, το πιο σημαντικό, πώς θα μοιάζει η νέα CPython;