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

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

[Επικοινωνία] Κατανόηση του BIO και του NIO

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 17/5/2019 3:34:50 μ.μ. | | |

Περίληψη: Κατανόηση του BIO και του NIO
Πρόσφατα, μάλλον κοίταξα τον πηγαίο κώδικα του ZooKeeper και του Mina και διαπίστωσα ότι και τα δύο υλοποιούνται σε Java NIO, επομένως είναι απαραίτητο να καταλάβουμε τι είναι το NIO. Το παρακάτω είναι η δική μου περίληψη βασισμένη σε διαδικτυακές πληροφορίες, για να εξοικονομήσω χρόνο, σχεδίασα το διάγραμμα πρόχειρα, αρκεί να πετύχω το νόημα.

Εισαγωγή:
BIO: Σύγχρονος αποκλεισμός IO, η λειτουργία υλοποίησης διακομιστή είναι η σύνδεση ενός νήματος τη φορά, δηλαδή, όταν ο πελάτης έχει αίτημα σύνδεσης, ο διακομιστής πρέπει να ξεκινήσει ένα νήμα για επεξεργασία, εάν αυτή η σύνδεση δεν κάνει τίποτα θα προκαλέσει περιττή επιβάρυνση νήματος, φυσικά, μπορεί να βελτιωθεί μέσω του μηχανισμού συγκέντρωσης νημάτων.
NIO: Σύγχρονο IO χωρίς αποκλεισμό, η λειτουργία υλοποίησης διακομιστή είναι ένα αίτημα ανά νήμα, δηλαδή, το αίτημα σύνδεσης που αποστέλλεται από τον πελάτη θα καταχωρηθεί στον πολυπλέκτη και ο πολυπλέκτης θα ξεκινήσει ένα νήμα για επεξεργασία όταν η σύνδεση έχει αίτημα εισόδου/εξόδου.
AIO (NIO.2): Ασύγχρονο IO χωρίς αποκλεισμό, η λειτουργία υλοποίησης διακομιστή είναι να ζητά αποτελεσματικά ένα νήμα και τα αιτήματα εισόδου/εξόδου του πελάτη ολοκληρώνονται πρώτα από το λειτουργικό σύστημα και στη συνέχεια ειδοποιούν την εφαρμογή διακομιστή να ξεκινήσει το νήμα για επεξεργασία.

ΒΙΟΓΡΑΦΙΚΟ
Σύγχρονος αποκλεισμός IO, πιστεύω ότι όλοι όσοι έχουν μάθει προγραμματισμό δικτύου λειτουργικού συστήματος ή προγραμματισμό δικτύου οποιασδήποτε γλώσσας είναι εξοικειωμένοι, στον βρόχο while ο διακομιστής θα καλέσει τη μέθοδο αποδοχής για να περιμένει το αίτημα σύνδεσης του πελάτη λήψης, μόλις ληφθεί ένα αίτημα σύνδεσης, μπορεί να δημιουργηθεί μια υποδοχή επικοινωνίας σε αυτήν την υποδοχή επικοινωνίας για λειτουργίες ανάγνωσης και εγγραφής, αυτή τη στιγμή δεν μπορεί πλέον να λαμβάνει άλλα αιτήματα σύνδεσης πελάτη, μπορεί μόνο να περιμένει την εκτέλεση της λειτουργίας με τον τρέχοντα συνδεδεμένο πελάτη.
Εάν το BIO θέλει να μπορεί να επεξεργάζεται πολλά αιτήματα πελατών ταυτόχρονα, πρέπει να χρησιμοποιεί multi-threading, δηλαδή κάθε φορά που τα μπλοκ αποδοχής περιμένουν ένα αίτημα πελάτη, μόλις ληφθεί ένα αίτημα σύνδεσης, δημιουργείται μια υποδοχή επικοινωνίας και ανοίγει ένα νέο νήμα για την επεξεργασία του αιτήματος ανάγνωσης και εγγραφής δεδομένων αυτής της υποδοχής και, στη συνέχεια, συνεχίστε αμέσως να αποδέχεστε και να περιμένετε άλλα αιτήματα σύνδεσης πελάτη, δηλαδή, δημιουργείται ένα νήμα για κάθε αίτημα σύνδεσης πελάτη που θα υποβληθεί σε επεξεργασία ξεχωριστά, το σχηματικό είναι πιθανώς ως εξής:
C:/Users/kevin/AppData/Local/YNote/data/kevinsir2003@163.com/8107c3f773ad4d2aa1a5a476e650ef84/094528_zqyy.jpeg

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

ΝΙΟ
Το κλειδί για το σύγχρονο IO χωρίς αποκλεισμό είναι η υιοθέτηση μιας ιδέας που βασίζεται σε συμβάντα για την υλοποίηση ενός πολυπλέκτη.
Η μεγαλύτερη διαφορά μεταξύ NIO και BIO είναι ότι χρειάζεται μόνο να ανοίξετε ένα νήμα για να χειριστείτε συμβάντα IO από πολλούς πελάτες.
Είναι ένας πολυπλέκτης που μπορεί να ακούσει συμβάντα IO από πολλούς πελάτες:
Α. Εάν ο διακομιστής ακούσει το αίτημα σύνδεσης πελάτη, θα δημιουργήσει μια υποδοχή επικοινωνίας για αυτόν (κανάλι σε Java) και, στη συνέχεια, θα επιστρέψει για να συνεχίσει την ακρόαση.
Β. Εάν ο διακομιστής ακούσει τα δεδομένα που αποστέλλονται από τον πελάτη που έχει δημιουργήσει μια υποδοχή επικοινωνίας, θα καλέσει την αντίστοιχη διεπαφή για την επεξεργασία των ληφθέντων δεδομένων και εάν υπάρχουν πολλοί πελάτες ταυτόχρονα, τα δεδομένα μπορούν επίσης να υποβληθούν σε επεξεργασία με τη σειρά τους.
Γ. Ακούστε τα αιτήματα σύνδεσης πολλών πελατών και λάβετε αιτήματα δεδομένων, καθώς και ακούστε πότε έχετε δεδομένα για αποστολή.
C:/Users/kevin/AppData/Local/YNote/data/kevinsir2003@163.com/41709898aa0a4f8a830d7c348ed05fbb/094528_of9c.jpeg


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

Αντίστοιχα σενάρια εφαρμογής
Σε αυτό το σημείο, ίσως έχετε παρατηρήσει ότι μόλις φτάσει ένα αίτημα (είτε είναι πολλά ταυτόχρονα είτε μόνο ένα), η αντίστοιχη συνάρτηση επεξεργασίας IO θα κληθεί να το χειριστεί, οπότε:
(1) Το NIO είναι κατάλληλο για χειρισμό σεναρίων με μεγάλο αριθμό συνδέσεων, αλλά οι συνδέσεις είναι σχετικά σύντομες (ελαφριά λειτουργία), όπως Jetty, Mina, ZooKeeper κ.λπ., οι οποίες υλοποιούνται όλες με βάση το java nio.
(2) Η μέθοδος BIO είναι κατάλληλη για σενάρια όπου ο αριθμός των συνδέσεων είναι σχετικά μικρός και σταθερός, κάτι που απαιτεί υψηλούς πόρους διακομιστή και περιορίζεται σε εφαρμογές.





Προηγούμενος:Η διαφορά μεταξύ ajax και axios και fetch
Επόμενος:Πλαίσιο προγραμματισμού εργασιών ανοιχτού κώδικα Quartz
Δημοσιεύτηκε στις 21/5/2019 7:32:33 μ.μ. |
Μαθαίνω να μαθαίνω
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com