# Απόδοση Πώς να κάνετε την Perl να τρέχει γρήγορα στο pperl και - εξίσου σημαντικό - πώς να διαπιστώσετε αν το κάνει ήδη. Αυτός ο οδηγός είναι το πρακτικό στρώμα: πού οι κλασικές συμβουλές απόδοσης της Perl εξακολουθούν να ισχύουν, πού το JIT και ο αυτόματος παραλληλοποιητής του pperl τις έχουν αθόρυβα καταστήσει άσχετες, και πού το pperl ανταμείβει κώδικα διαμορφωμένο με τρόπους που η upstream Perl δεν ένοιαζε ποτέ. Σκόπιμα δεν είναι μια ξενάγηση στον μηχανισμό. Το JIT, ο παράλληλος χρονοπρογραμματιστής, η αποστολή των native αρθρωμάτων και το FFI έχουν το καθένα το δικό του κεφάλαιο στον [οδηγό αρχιτεκτονικής](../pperl-architecture/index.md)· αυτός ο οδηγός σας λέει τι να *γράψετε* ώστε να ενεργοποιηθούν, και παραπέμπει σε εκείνα τα κεφάλαια για το *γιατί*. ## Σε ποιους απευθύνεται Ένας ενεργός προγραμματιστής Perl με ένα πρόγραμμα που είναι πολύ αργό, ή ένα που θέλει να το διατηρήσει γρήγορο. Ξέρετε πώς να γράφετε τον κώδικα· θέλετε να μάθετε ποιες συνήθειες αποδίδουν εδώ, ποιες είναι πλέον περιττό βάρος, και πώς να μετρήσετε τη διαφορά χωρίς να μαντεύετε. Δεν χρειάζεται να κατανοείτε το Cranelift, το Rayon ή τον εσωτερικό βρόχο του διερμηνευτή. Όπου μια συμπεριφορά εξαρτάται από αυτά, ο οδηγός δηλώνει τη συμπεριφορά και παραπέμπει στο κεφάλαιο που την εξηγεί. ## Ο ένας κανόνας που επιβιώνει από τα πάντα **Μετρήστε πρώτα.** Κάθε άλλος κανόνας σε αυτόν τον οδηγό εξαρτάται από μια μέτρηση που δεν έχετε ακόμη κάνει. Η διαίσθηση για την απόδοση της Perl, ακονισμένη στον upstream διερμηνευτή, προβλέπει λανθασμένα στο pperl και προς τις δύο κατευθύνσεις: κώδικας που περιμένετε να είναι αργός μεταγλωττίζεται ορισμένες φορές σε εγγενή κώδικα μηχανής και τρέχει γρηγορότερα από τη C· κώδικας που περιμένετε να σώσει το JIT επιστρέφει ορισμένες φορές στον διερμηνευτή επειδή μια λειτουργία συμβολοσειρών τρύπωσε μέσα σε έναν αριθμητικό βρόχο. Ο προφίλερ δεν λέει ψέματα, ενώ η διαίσθησή σας, μεταφερμένη από έναν άλλο runtime, λέει. Ξεκινήστε από το [Μέτρηση](measuring.md). ## Πώς είναι οργανωμένος ο οδηγός * [Μέτρηση](measuring.md) * [Ιδιωματισμοί](idioms.md) * [Ταξινόμηση](sorting.md) * [Γράφοντας γρήγορο pperl](writing-fast-pperl.md) - **Μέτρηση** - τα εργαλεία που πράγματι λειτουργούν υπό το pperl. Οι upstream προφίλερ XS (`Devel::NYTProf`) δεν φορτώνονται· η ενσωματωμένη κατασκευή `--features=profile` και ο εκτελεστής `bench/run-perlbench` φορτώνονται. Πώς να διαβάζετε την έξοδό τους και πώς να κάνετε A/B σύγκριση δύο εκδόσεων μιας ρουτίνας. - **Ιδιωματισμοί** - μια διαλογή των κλασικών ιδιωματισμών απόδοσης της Perl. Ο καθένας φέρει ετικέτα: εξακολουθεί να ισχύει, κατέστη άνευ αντικειμένου από το JIT ή τον παραλληλοποιητή, ή απέκτησε νέα σημασία λόγω του τρόπου που μεταγλωττίζει το pperl. Οι ιδιωματισμοί που ήταν λαϊκή σοφία στην upstream Perl δεν είναι όλοι λαϊκή σοφία εδώ. - **Ταξινόμηση** - η `sort` σε βάθος: ο μετασχηματισμός Schwartzian, ο μετασχηματισμός Guttman-Rosler, το κόστος της υπορουτίνας `sort`, και πότε ο συγκριτής είναι το σημείο συμφόρησης. - **Γράφοντας γρήγορο pperl** - το θετικό πρόγραμμα: πώς να δομήσετε έναν θερμό βρόχο ώστε να τον μεταγλωττίσει το JIT, πώς να διαμορφώσετε μια αναγωγή ώστε να τη διεκδικήσει ο παραλληλοποιητής, και το ένα λάθος - η ανάμειξη εργασίας με συμβολοσειρές μέσα σε έναν αριθμητικό βρόχο - που απενεργοποιεί αθόρυβα και τα δύο. ## Τι δεν καλύπτει αυτός ο οδηγός Οι μηχανισμοί βρίσκονται αλλού και αυτός ο οδηγός δεν τους επαναλαμβάνει: - [Μεταγλώττιση JIT](../pperl-architecture/jit.md) - τι μεταγλωττίζεται, το μοντέλο cache, η ανάλυση τύπου μεταβλητών. - [Παράλληλη εκτέλεση](../concurrent-execution/parallel.md) - η ανάλυση αναγωγής, η πύλη παρενεργειών, οι έλεγχοι νημάτων του CLI. - [Απόδοση regex](../regular-expression/performance.md) - οπισθοχώρηση, καταστροφικά μοτίβα, ο βελτιστοποιητής της μηχανής. Η ταχύτητα των regex είναι ξεχωριστός κλάδος· τίποτε σε αυτόν τον οδηγό δεν τον επαναλαμβάνει. - [Native αρθρώματα](../pperl-architecture/native-modules.md) - γιατί το `List::Util` και τα συναφή τρέχουν με ταχύτητα ενσωματωμένης συνάρτησης χωρίς στρώμα XS. - [Auto-FFI](../pperl-architecture/ffi.md) - κλήση της C χωρίς XS, και το κόστος μαρσαλαρίσματος ανά κλήση που το καθιστά λάθος εργαλείο για έναν θερμό εσωτερικό βρόχο. ## Μια σημείωση για τους αριθμούς Οι συγκεκριμένες επιταχύνσεις σε αυτόν τον οδηγό αναπαράγονται από τα κεφάλαια αρχιτεκτονικής και ταυτοχρονισμού, τα οποία φέρουν τα μετρημένα μεγέθη και το benchmark που τα παρήγαγε. Όπου αυτός ο οδηγός δηλώνει μια επιτάχυνση χωρίς αριθμό, η ποιοτική συμπεριφορά είναι τεκμηριωμένη, αλλά το ακριβές μέγεθος εξαρτάται από το μηχάνημά σας, τα δεδομένα σας και την κατασκευή σας - τρέξτε το [`bench/run-perlbench`](measuring.md) και εμπιστευτείτε τη δική σας μέτρηση έναντι οποιουδήποτε τυπωμένου λόγου.