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

Άποψη: 16497|Απάντηση: 5

[Πηγή] .NET/C# multithreaded concurrency χρησιμοποιώντας το pit του HttpWebRequest

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 2021-12-20 15:21:04 | | | |
Όταν κάνετε προγραμματισμό εργασιών, το καθήκον του προγραμματισμού είναι να προσομοιώσετε την έναρξη ενός αιτήματος HTTP και να διαπιστώσετε ότι όταν υπάρχουν περισσότερες εργασίες, ο προγραμματισμός εργασιών φαίνεται να είναι σαν ψεύτικος θάνατος.

Ο μέγιστος προεπιλεγμένος αριθμός ζητούμενων συνδέσεων σε ένα κανονικό σύστημα Windows είναι 2 και σε ένα λειτουργικό σύστημα διακομιστή, είναι προεπιλεγμένος σε 10. Εάν δεν τροποποιήσετε αυτό το όριο ταυτόχρονης σύνδεσης,Τότε ο αριθμός των συνδέσεων http που μπορεί να κάνει ο πελάτης ταυτόχρονα είναι μόνο 2 ή 10

System.Net.ServicePointManager.DefaultConnectionLimit Αυτός είναι ο μέγιστος αριθμός συνδέσεων που μπορούν να λάβουν την τρέχουσα προεπιλεγμένη ρύθμιση, όπως φαίνεται στην παρακάτω εικόνα:



Υπάρχει προεπιλεγμένο όριο συγχρονισμού για το HttpClient;

Πριν από το .Net 4.0, οι λειτουργίες Http βασίζονταν στο HttpWebRequest. Έχει ένα πολύ συντηρητικό μέγιστο όριο 2 ορίων συγχρονισμού για τον ίδιο ιστότοπο από προεπιλογή, γεγονός που συχνά κάνει τα HttpWebRequests να μην έχουν την ιδανική ταχύτητα από προεπιλογή (υποθέτω ότι αυτή η στρατηγική απογοητεύει πολλούς κωδικοποιητές) και η τιμή του App.config ή του ServicePointManager.DefaultConnectionLimit πρέπει να τροποποιηθεί.

Η MS εισήγαγε μια κλάση HttpClient στο .Net 4.5 για να χειριστεί τις λειτουργίες Http και σκέφτηκα ότι το HttpClient και το HttpWebRequest ακολούθησαν την ίδια πολιτική. Σήμερα, όταν έγραφα ένα πρόγραμμα λήψης πολλαπλών νημάτων, χρησιμοποίησα 10 ταυτόχρονες συνδέσεις και διαπίστωσα ότι το HttpClient δεν έχει όριο ταυτόχρονου αριθμού από προεπιλογή.

Στην αρχή νόμιζα ότι ήταν. Το Net 4.5 αφαίρεσε αυτό το όριο ταυτοχρονισμού (εξάλλου, βασικά κανείς δεν ακολουθεί αυτό το πρότυπο τώρα) και στη συνέχεια ξαναέγραψε τον σχετικό κώδικα με το WebRequest και διαπίστωσε ότι ήταν ακόμα όριο ταυτοχρονισμού 2 και η τιμή του ServicePointManager.DefaultConnectionLimit ήταν επίσης 2. Δηλαδή, το HttpClient δεν ελέγχεται από την πολιτική ταυτόχρονης εκτέλεσης HttpWebRequest και δεν υπάρχει όριο ταυτοχρονισμού σε επίπεδο συστήματος.

Επιπλέον, κατά τη διάρκεια της δοκιμής, διαπίστωσα ότι το HttpWebRequest δεν έχει προεπιλογή έως 2 ταυτόχρονες λειτουργίες για όλες τις διευθύνσεις. Για παράδειγμαΔεν υπάρχει όριο συγχρονισμού για τοπικές συνδέσεις διευθύνσεων HTTP (http://localhost/*).

Κλήσεις περιβάλλοντος πολλαπλών νημάτων C# στο όριο ταυτόχρονης σύνδεσης HttpWebRequest

Το HttpWebRequest ή το WebClient του .net έχει ένα όριο ταυτόχρονης σύνδεσης στην περίπτωση multithreading, το οποίο είναι 2 από προεπιλογή σε λειτουργικά συστήματα επιτραπέζιων υπολογιστών όπως τα Windows XP και τα Windows 7 και 10 από προεπιλογή σε λειτουργικά συστήματα διακομιστή. Αν δεν αλλάξετε αυτό το όριο ταυτόχρονης σύνδεσης, ο αριθμός των συνδέσεων HTTP που μπορεί να κάνει ένας πελάτης κάθε φορά είναι μόνο 2 ή 10. Για ορισμένες εφαρμογές, όπως προγράμματα περιήγησης ή αράχνες, ο αριθμός των 2 ή 10 ταυτόχρονων ταυτοχρονισμών είναι πολύ μικρός και επηρεάζει σε μεγάλο βαθμό την απόδοση της εφαρμογής. Αυτό το όριο ταυτόχρονης σύνδεσης οφείλεται στα πρότυπα HTTP 1.0 και HTTP 1.1 που καθορίζουν έως και 2 ταυτόχρονες συνδέσεις. Ωστόσο, τα κύρια προγράμματα περιήγησης δεν ακολουθούν πλέον αυτόν τον κανόνα, αλλά το πλαίσιο .NET εξακολουθεί να ακολουθεί αυτόν τον κανόνα από προεπιλογή.

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

Μπορούμε επίσης να ορίσουμε τον μέγιστο αριθμό ταυτόχρονων συνδέσεων στο app.config ως εξής:

Άρθρο αναφοράς

Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Η σύνδεση με υπερσύνδεσμο είναι ορατή.





Προηγούμενος:Xshell Xftp Για να συνεχίσετε να χρησιμοποιείτε αυτό το πρόγραμμα, πρέπει να εφαρμόσετε το πιο πρόσφατο...
Επόμενος:Η εντολή Maven ωθεί πακέτα jar τρίτων σε ιδιωτικά αποθετήρια Nexus
Δημοσιεύτηκε στις 2021-12-26 17:20:57 |
Μάθε να μαθαίνεις。。。。。
Δημοσιεύτηκε στις 2022-1-10 08:42:47 |
Μάθε να μαθαίνεις。。。。。
Δημοσιεύτηκε στις 2022-3-8 15:58:54 |
Μαθαίνω...
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 2023-2-18 21:47:09 |
Επιπλέον, η λύση

 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 2023-3-10 21:21:15 |
Διαμόρφωση μέσω web.config

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

Mail To:help@itsvse.com