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

Άποψη: 4864|Απάντηση: 4

[Πηγή] 【Στροφή】C# ταυτόχρονος συγχρονισμός πολλαπλών νημάτων κάτω από διάφορες κλειδαριές

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 2023-4-13 18:44:49 | | | |
Υπό κανονικές συνθήκες, εφόσον εμπλέκεται προγραμματισμός πολλαπλών νημάτων, η πολυπλοκότητα του προγράμματος θα αυξηθεί σημαντικά, η απόδοση θα μειωθεί σημαντικά και η πιθανότητα σφαλμάτων θα αυξηθεί σημαντικά.

Ο πολυνηματικός προγραμματισμός προορίζεται για την παράλληλη εκτέλεση ενός προγράμματος για τη βελτίωση των δυνατοτήτων επεξεργασίας δεδομένων, αλλά στις περισσότερες περιπτώσεις, περιλαμβάνει ανταγωνισμό για κοινόχρηστους πόρους, επομένως πρέπει να κλειδώνεται κατά την τροποποίηση αντικειμένων πόρων. Ωστόσο, υπάρχουν πολλοί τρόποι εφαρμογής κλειδαριών, οπότε ας ρίξουμε μια ματιά στην εφαρμογή και την απόδοση πολλών τύπων κλειδαριών στη C#.

Διάφοροι τρόποι χρήσης κλειδαριών

1. Ατομική κλειδαριά

Επίτευξη ανταγωνισμού «χωρίς κλείδωμα» μέσω της ατομικής λειτουργίας Interlocked.CompareExchange.

Η επίσημη εξήγηση είναι η παροχή ατομικών πράξεων για μεταβλητές που μοιράζονται πολλαπλά νήματα. Χώρος ονομάτων: System.Threading

2. Κρίσιμος τομέας

Η σειριοποίηση πολλαπλών νημάτων για πρόσβαση σε δημόσιους πόρους ή ένα κομμάτι κώδικα είναι γρήγορη και κατάλληλη για τον έλεγχο της πρόσβασης σε δεδομένα. Η σύνταξη κλειδώματος στη C# είναι ένα σάκχαρο σύνταξης για την κρίσιμη περιοχή (Monitor).

3. Ατομική λειτουργία

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

Επίσημα ερμηνεύεται ως αύξηση της τιμής μιας δεδομένης μεταβλητής με τη μορφή ατομικής πράξης και αποθήκευση του αποτελέσματος. Χώρος ονομάτων: System.Threading

4. Κλειδαριά ανάγνωσης και εγγραφής

Τα κλειδώματα ανάγνωσης-εγγραφής επιτρέπουν την ανάγνωση πόρων όταν γράφουν άλλα προγράμματα, επομένως εάν ο πόρος επιτρέπει βρώμικες αναγνώσεις, αυτό είναι πιο κατάλληλο.

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

5. Σηματοφόρος

Σηματοφόροι, σχεδιασμένοι για τον έλεγχο περιορισμένου αριθμού πόρων χρήστη.

Η επίσημη εξήγηση περιορίζει τον αριθμό των νημάτων που μπορούν να έχουν πρόσβαση σε έναν πόρο ή μια ομάδα πόρων ταυτόχρονα. Ο χώρος ονομάτων είναι System.Threading

6. Εκδηλώσεις

Χρησιμοποιείται για να ειδοποιήσει το νήμα ότι έχουν συμβεί ορισμένα συμβάντα, ξεκινώντας την έναρξη μιας εξαρτώμενης εργασίας.

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

7. Αμοιβαίος αποκλεισμός

Υπάρχει μια κλάση Mutex στη C#, ακριβώς κάτω από τον χώρο ονομάτων System.Threading, το Mutex είναι στην πραγματικότητα ένα mutex, το οποίο όχι μόνο μπορεί να αντιμετωπίσει τον ανταγωνισμό πόρων μεταξύ πολλαπλών νημάτων, αλλά και να χειριστεί τον ανταγωνισμό πόρων μεταξύ των διαδικασιών.


Κωδικός δοκιμής απόδοσης

Εκτελέστε τον κώδικα

Αποτελέσματα δοκιμών απόδοσης



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

1) Σε διάφορες δοκιμές, είναι σίγουρα το πιο γρήγορο να μην κλειδώνετε, επομένως προσπαθήστε να αποφύγετε τον ανταγωνισμό πόρων που οδηγεί σε κλειδωμένη λειτουργία.

2) Το Interlocked.CompareExchange δείχνει σταθερά ανώτερη απόδοση στο multi-threading, καταλαμβάνοντας τη δεύτερη θέση.

3) Η τρίτη κλειδαριά, η κρίσιμη ζώνη δείχνει επίσης καλή απόδοση, γι' αυτό διαψεύστε τους άλλους όταν λένε ότι η απόδοση κλειδώματος είναι χαμηλή.

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

5) Η απόδοση του πέμπτου κλειδώματος ανάγνωσης/εγγραφής (ReaderWriterLockSlim) είναι επίσης εντάξει και δεν υποστηρίζει την ανάγνωση τίποτα και η πρακτικότητα εξακολουθεί να είναι σχετικά καλή.

6) Οι υπόλοιποι σηματοφόροι, συμβάντα και mutex έχουν τη χειρότερη απόδοση, φυσικά, έχουν το δικό τους πεδίο εφαρμογής, αλλά δεν έχουν καλή απόδοση στην αντιμετώπιση του ανταγωνισμού πόρων.

Αρχική διεύθυνση συνδέσμου:Η σύνδεση με υπερσύνδεσμο είναι ορατή.





Προηγούμενος:ASP.NET Πυρήνας (16) Εξαρτάται από την παροχή υπηρεσιών δυναμικής καταχώρισης
Επόμενος:Η μαλακή διαδρομή OpenWrt ξεκινά να εκτελείται μέσω ενός USB stick
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 2023-4-13 18:46:52 |
Τα προγράμματα C# επιτρέπουν μόνο σε μία παρουσία να εκτελεί τον σωστό κώδικα
https://www.itsvse.com/thread-3391-1-1.html

Η διαφορά μεταξύ ManualResetEvent και AutoResetEvent που μαθαίνεται από νήματα C#
https://www.itsvse.com/thread-4810-1-1.html

[Πραγματική μάχη]. Το NET/C# χρησιμοποιεί το SemaphoreSlim για να περιορίσει τις ταυτόχρονες μεθόδους εκτέλεσης
https://www.itsvse.com/thread-10259-1-1.html

C# Ανάγνωση/εγγραφή Κλείδωμα ReaderWriterLockSlim χρήση
https://www.itsvse.com/thread-3545-1-1.html

.net/c# Κλείδωμα συγχρονισμού πολλαπλών νημάτων χρήστη(string){...} Λεπτομερής εξήγηση
https://www.itsvse.com/thread-7764-1-1.html
Δημοσιεύτηκε στις 2023-4-13 19:21:44 |
Μάθε λίγο...
Δημοσιεύτηκε στις 2023-5-16 20:03:52 |
Μάθε λίγο...
Δημοσιεύτηκε στις 2023-5-19 11:41:25 |
Μαθαίνω να μαθαίνω
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com