Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 6958|Απάντηση: 1

Το multithreading θέτει την επεκτασιμότητα σε αδιέξοδο

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 6/12/2014 10:21:58 μ.μ. | | |
Αυτό είναι ένα άρθρο από τον κόσμο της Python, αλλά εξακολουθεί να ισχύει για ολόκληρο το πεδίο προγραμματισμού, αν και το multithreading μας επιτρέπει να επεξεργαζόμαστε τα αιτήματα πιο γρήγορα, αλλά υπάρχει επίσης ένα ανώτατο όριο, τα πράσινα νήματα (micro-thread) είναι η λύση.

Η ανάπτυξη λογισμικού πολλαπλών νημάτων επιλύει μεγάλο αριθμό προβλημάτων, ειδικά για εφαρμογές με επίκεντρο το δίκτυο που απαιτούν απαιτητικές επιδόσεις για να ανταποκρίνονται γρήγορα στους χρήστες. Δυστυχώς, το multithreading δεν αρκεί για την επίλυση μεγάλης κλίμακαςΤαυτοχρονισμόςσεξουαλικά προβλήματα.

Η αντιμετώπιση αυτών των ζητημάτων απαιτεί αλλαγή μοντέλων προγραμματισμού, χρησιμοποιώντας ασύγχρονα συμβάντα και μηχανισμούς που βασίζονται σε επανάκληση. Στο Druva, δημιουργήσαμε μια βιβλιοθήκη python που ονομάζεται Dhaga για την επίλυση μεγάλης κλίμακαςΤαυτοχρονισμός, ενώ το μοντέλο προγραμματισμού δεν απαιτεί σημαντικές αλλαγές.

Οι προγραμματιστές λογισμικού ζουν σε έναΤαυτοχρονισμόςκόσμος. Τα νήματα είναι πολίτες πρώτης κατηγορίας σήμερα, ειδικά κατά την ανάπτυξη, ειδικά όταν η εφαρμογή σας εκτελεί εντατικές λειτουργίες δικτύου, όπως το σύστημα inSync (προϊόν συγχρονισμού ασφάλειας δικτύου) όπως το Druva. Το Multithreading βοηθά τη ροή του κώδικα προγραμματισμού για λειτουργίες δικτύου απλή και τακτική. Όταν η εφαρμογή μας χρειάζεται βελτιώσεις ή βελτιώσεις απόδοσης, μπορεί να βελτιωθείΕλαστικότητα, μπορούμε να αυξήσουμε τον αριθμό των νημάτων.

Αλλά όταν πρόκειται για χιλιάδες κλίμακεςΤαυτοχρονισμόςΤα αιτήματα, τα νήματα δεν αρκούν.

Διαπιστώσαμε ότι το multithreading έχει τα ακόλουθα μειονεκτήματα:
1. Ο υπολογιστής-πελάτης συστήματος inSync πρέπει να δημιουργήσει αντίγραφα ασφαλείας μεγάλου αριθμού αρχείων στο διακομιστή μέσω κλήσεων RPC δικτύου. Ένας τυπικός τρόπος για τους προγραμματιστές να επιταχύνουν τα πράγματα είναι να χρησιμοποιούν νήματα. Ωστόσο, η απόδοση που προσφέρει το multi-threading αυξάνει το κόστος της μνήμης και της CPU. Οι προγραμματιστές πρέπει να διατηρήσουν μια ισορροπία μεταξύ ταχύτητας και αριθμού νημάτων.

2. Οι διακομιστές μας πρέπει να χειρίζονται μεταξύ του συστήματος inSync και χιλιάδων πελατώνΤαυτοχρονισμόςΣυνδέσεις και ειδοποιήσεις. Για να χειριστούμε αποτελεσματικά τις συνδέσεις, χρησιμοποιούμε νήματα για να χειριστούμε αιτήματα. Αλλά ο αυξανόμενος αριθμός πελατών του συστήματος inSync σημαίνει επίσης ότι πρέπει να συνεχίσουμε να αυξάνουμε τον αριθμό των νημάτων, τα οποία καταναλώνουν πολλή μνήμη διακομιστή και CPU.

3. Ο διακομιστής ιστού μας πρέπει να χειρίζεται χιλιάδες παράλληλα αιτήματα HTTP. Το μεγαλύτερο μέρος της εργασίας γίνεται στις υποδοχές δικτύου που λαμβάνουν και στέλνουν δεδομένα και τα περνούν στο backend του συστήματος inSync. Αναγκάζει τα περισσότερα νήματα να περιμένουν για λειτουργίες δικτύου. Προκαλώντας το πρόβλημα C10K, όταν υπάρχουν χιλιάδες σύγχρονα αιτήματα στον διακομιστή ιστού, η δημιουργία ενός νήματος για κάθε αίτημα είναι αρκετά μη επεκτάσιμη (Κλίμακα).

Περιορισμοί ασύγχρονων πλαισίων
Πολλά ασύγχρονα πλαίσια, συμπεριλαμβανομένων των Twisted, Tornado Tornado και asyncore, μπορούν να βοηθήσουν τους προγραμματιστές να απομακρυνθούν από τους δημοφιλείς τρόπους χρήσης νημάτων. Αυτά τα πλαίσια βασίζονται σε υποδοχές που δεν μπλοκάρουν και μηχανισμούς επανάκλησης (παρόμοιους με Node.js). Εάν χρησιμοποιήσουμε αυτά τα πλαίσια ως έχουν, τα κύρια μέρη του κώδικα Druva θα πρέπει να ανακατασκευαστούν. Δεν είναι αυτό που θέλουμε να κάνουμε. Η ανακατασκευή κώδικα αυξάνει τους κύκλους ανάπτυξης και δοκιμών, εμποδίζοντάς μας να ανταποκριθούμε στις απαιτήσεις κλίμακας. Δεδομένου ότι πολλά μέρη του προϊόντος πρέπει να είναι τεράστια, ο καθένας από εμάς θα πρέπει να τα αναδιαμορφώσει – εξ ου και η προσπάθεια διπλασιασμού ή τριπλασιασμού.

Για να αποφύγουμε να αλλάξουμε τόσο πολύ κώδικα, έπρεπε να απομακρυνθούμε από την άμεση χρήση του υπάρχοντος πλαισίου. Ευτυχώς, βρήκαμε μερικά χρήσιμα εργαλεία.

Επειδή θέλουμε να ελέγξουμε την εκτέλεση του κώδικα στο I/O του δικτύου, χρειαζόμαστε έναν τρόπο να χωρίσουμε ένα νήμα σε μικρο-νήματα. ΒρίσκουμεΠρασινάδες。 Παρέχει έναν μη σιωπηρό προγραμματισμό μικρονημάτων που ονομάζεται συν-ρουτίνα ρουτίνας. Με άλλα λόγια. Είναι χρήσιμο όταν θέλετε να ελέγξετε την εκτέλεση του κώδικά σας. Μπορείτε να δημιουργήσετε μικρονήματα για προσαρμοσμένα χρονοδιαγράμματα, επειδή μπορείτε να ελέγξετε πότε τα πράσινα δίνουν παύσεις. Αυτό είναι τέλειο για εμάς γιατί μας δίνει τον πλήρη έλεγχο του προγραμματισμού του κώδικά μας.

Το Tornado είναι ένα απλό, μη αποκλεισμένο πλαίσιο διακομιστή ιστού γραμμένο σε Python που έχει σχεδιαστεί για να χειρίζεται χιλιάδες ασύγχρονα αιτήματα. Χρησιμοποιούμε το βασικό συστατικό του, το IOLoop IOStream. Το IOLoop είναι ένας βρόχος συμβάντων εισόδου/εξόδου υποδοχής χωρίς αποκλεισμό. Χρησιμοποιεί epoll (σε Linux) ή ουρές (BSD και Mac OS X), διαφορετικά επιλέξτε (στα Windows) εάν είναι διαθέσιμες. Το IOStream παρέχει υποδοχές που δεν μπλοκάρουν, όπως βολική συσκευασία για ανάγνωση και γραφή. Αναθέτουμε όλες τις λειτουργίες υποδοχής στο Tornado και στη συνέχεια χρησιμοποιούμε επανακλήσεις για να ενεργοποιήσουμε λειτουργίες κώδικα για να ολοκληρωθούν (σημείωση banq: πολύ παρόμοια με Node.js μηχανισμό).

Είναι μια καλή αρχή, αλλά χρειαζόμαστε περισσότερα. Εάν χρησιμοποιήσουμε την παραπάνω ενότητα απευθείας στον κώδικά μας, μεγάλο μέρος του κώδικα RPC μας θα πρέπει να αλλάξει, προγραμματίζοντας το RPC μέσω greenlets, διασφαλίζοντας ότι τα greenlets δεν μπλοκάρουν (αν φράξουν τα greenlet, θα φράξει ολόκληρο το νήμα και όλα τα άλλα), χειριστείτε τις λειτουργίες επανάκλησης από τον ανεμοστρόβιλο.

Χρειαζόμαστε μια αφαίρεση για να διαχειριστούμε και να τακτοποιήσουμε τα πράσινα για να αποφύγουμε να τα φράξουμε με εξωτερικές κλήσεις, και αυτή η αφαίρεση μπορεί να είναι μαζικά επεκτάσιμη πέρα από τα νήματα. Αυτή η αφαίρεση είναι η Dhaga, η οποία επιτρέπει στον προγραμματισμό της ροής του κώδικα της εφαρμογής όπως μια παραδοσιακή σύγχρονη ακολουθία, αλλά η εκτέλεση είναι ασύγχρονη.

Το Dhaga (από τα Χίντι, που σημαίνει νήμα) είναι ένα πλαίσιο εκτέλεσης για ένα ελαφρύ νήμα που αφαιρούμε. Η κλάση Dhaga προέρχεται από greenlets και χρησιμοποιεί εναλλαγή στοίβας για την εκτέλεση πολλαπλών ροών κώδικα σε ένα μόνο νήμα λειτουργικού συστήματος. Τα νήματα ενός λειτουργικού συστήματος εκτελούν πολλαπλά dhagases χρησιμοποιώντας συνεργατικό προγραμματισμό. Κάθε φορά που ένα ντάγκα περιμένει (κυρίως περιμένοντας να επιστρέψει μια κλήση RPC), παραχωρεί τον έλεγχο στο γονικό επίπεδο (δηλαδή, στο πλαίσιο εκτέλεσης του νήματος σε επίπεδο λειτουργικού συστήματος που το δημιούργησε). Στη συνέχεια, το γονικό επίπεδο προγραμματίζει ένα άλλο ντάγκα για να είναι έτοιμο να τρέξει. Η κλήση RPC θα περάσει στον διακομιστή ιστού του ανεμοστρόβιλου για να γράψει το Socket ασύγχρονα και στη συνέχεια να καταχωρήσει μια επανάκληση όταν επιστρέψει, και όταν επιστρέψει αυτό το RPC, το dhaga σε αναμονή θα προστεθεί στην εκτελέσιμη ουρά και στη συνέχεια θα παραληφθεί από το γονικό νήμα. (Σημείωση Banq: παρόμοια με node.js αρχή)

Μπορούμε να χρησιμοποιήσουμε το Dhaga αντί για νήματα για λειτουργίες υψηλής καθυστέρησης και χρησιμοποιούμε 512 dhagas σε ένα μόνο νήμα όταν ο αριθμός των νημάτων αυξάνεται πέρα από ένα λογικό όριο απόδοσης.







Προηγούμενος:Το μοτίβο πλαισίου mvc είναι νεκρό
Επόμενος:Πλεονεκτήματα και μειονεκτήματα των πλαισίων MVC:
Δημοσιεύτηκε στις 7/12/2014 5:22:55 μ.μ. |
Το να διαβάζεις και να ποστάρεις είναι αρετή
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com