Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 4864|Antwort: 4

[Quelle] 【Turn】C# Multithreaded Nebenläufigkeit unter verschiedenen Sperren

[Link kopieren]
Veröffentlicht am 13.04.2023, 18:44:49 | | | |
Unter normalen Umständen steigt die Komplexität des Programms erheblich, die Leistung sinkt erheblich und die Fehlerwahrscheinlichkeit steigt erheblich.

Multithreaded-Programmierung ist dazu gedacht, ein Programm parallel auszuführen, um die Datenverarbeitungsfähigkeiten zu verbessern, aber in den meisten Fällen gibt es einen Wettbewerb um gemeinsame Ressourcen, weshalb es beim Ändern von Ressourcenobjekten gesperrt werden muss. Es gibt jedoch viele Möglichkeiten, Sperren zu implementieren, daher werfen wir einen Blick auf die Implementierung und Leistung mehrerer Arten von Sperren in C#.

Verschiedene Möglichkeiten, Schlösser zu nutzen

1. Atomsperre

Erreichen Sie "lockless" Wettbewerb durch die atomare Operation Interlocked.CompareExchange.

Die offizielle Erklärung ist, atomare Operationen für Variablen bereitzustellen, die von mehreren Threads geteilt werden. Namensraum: System.Threading

2. Kritischer Bereich

Die Serialisierung mehrerer Threads zum Zugriff auf öffentliche Ressourcen oder einen Codeabschnitt ist schnell und eignet sich für die Steuerung des Datenzugriffs. Die Sperrsyntax in C# ist ein Syntaxzucker für den kritischen Bereich (Monitor).

3. Atomare Operation

Atomare Operationen, die ein Spezialfall sind, sind von Natur aus threadsicher, sodass sie nicht gesperrt werden müssen.

Offiziell interpretiert als Erhöhung des Wertes einer gegebenen Variablen in Form einer atomaren Operation und Speicherung des Ergebnisses. Namensraum: System.Threading

4. Lesen und Schließen schreiben

Lese-Schreib-Sperren ermöglichen das Lesen von Ressourcen, wenn andere Programme schreiben, daher ist dies angemessener, wenn die Ressource Dirty Reads erlaubt.

Die offizielle Erklärung nennt einen gesperrten Zustand, der zur Verwaltung des Ressourcenzugriffs verwendet wird und Multithread-Lesevorgänge oder exklusiven Schreibzugriff ermöglicht. Der Namensraum ist System.Threading

5. Semaphor

Semaphore, die zur Steuerung einer begrenzten Anzahl von Benutzerressourcen entwickelt wurden.

Die offizielle Erklärung begrenzt die Anzahl der Threads, die gleichzeitig auf eine Ressource oder einen Ressourcenpool zugreifen können. Der Namensraum ist System.Threading

6. Ereignisse

Wird verwendet, um den Thread zu benachrichtigen, dass einige Ereignisse eingetreten sind, was den Beginn einer Nachfolgeaufgabe startet.

Die offizielle Erklärung besagt, dass Thread-Synchronisationsereignisse automatisch zurückgesetzt werden, wenn ein Signal nach der Freigabe eines Threads empfangen wird. Solche Typen können nicht vererbt werden.

7. Gegenseitiger Ausschluss

Es gibt eine Mutex-Klasse in C#, direkt unter dem System-Threading-Namensraum, Mutex ist tatsächlich ein Mutex, das nicht nur den Ressourcenwettbewerb zwischen mehreren Threads bewältigen kann, sondern auch den Ressourcenwettbewerb zwischen Prozessen.


Leistungstestcode

Führe den Code aus

Ergebnisse des Leistungstests



Hinweis: Die oben genannten Daten sind nur das Ergebnis der Hardwareleistung der aktuellen Testumgebung und können nur miteinander verglichen werden.

1) In verschiedenen Tests ist es definitiv am schnellsten, um nicht zu sperren, also versuchen Sie, den Ressourcenwettbewerb zu vermeiden, der zu einem gesperrten Betrieb führt.

2) Interlocked. CompareExchange zeigt durchweg eine überlegene Leistung im Multithreading und belegt den zweiten Platz.

3) Die dritte Sperre, die kritische Zone, zeigt ebenfalls gute Leistung, daher widerlegen Sie bitte andere, wenn sie sagen, die Sperrleistung sei niedrig.

4) Der vierte Platz ist die atomare Variable (atomare) Operation, die derzeit jedoch nur das Selbstvergrößern und Subtraktieren von Variablen unterstützt, und die Anwendbarkeit ist nicht stark.

5) Die Leistung des fünften Lese-/Schreib-Schlosses (ReaderWriterLockSlim) ist ebenfalls in Ordnung, es unterstützt Nichtslesen, und die Praktikabilität ist immer noch relativ gut.

6) Die übrigen Semaphore, Events und Mutex haben die schlechteste Leistung, natürlich haben sie ihren eigenen Anwendungsbereich, aber sie sind im Umgang mit Ressourcenkonkurrenz nicht gut.

Ursprüngliche Linkadresse:Der Hyperlink-Login ist sichtbar.





Vorhergehend:ASP.NET Core (16) Abhängig von der Einspeisung dynamischer Registrierungsdienste
Nächster:Soft-Route OpenWrt wird über einen USB-Stick gestartet
 Vermieter| Veröffentlicht am 13.04.2023, 18:46:52 |
C#-Programme erlauben nur einer Instanz, den korrekten Code auszuführen
https://www.itsvse.com/thread-3391-1-1.html

Der Unterschied zwischen ManualResetEvent und AutoResetEvent wird von C#-Threads gelernt
https://www.itsvse.com/thread-4810-1-1.html

[Tatsächlicher Kampf]. NET/C# verwendet SemaphoreSlim, um gleichzeitige Ausführungsmethoden zu begrenzen
https://www.itsvse.com/thread-10259-1-1.html

C# Lesen/Schreiben Lock ReaderWriterLockSlim-Nutzung
https://www.itsvse.com/thread-3545-1-1.html

.net/c# Benutzer-multithreaded Nebenlaufbahn-Lock(string){...} Detaillierte Erklärung
https://www.itsvse.com/thread-7764-1-1.html
Veröffentlicht am 13.04.2023, 19:21:44 |
Lerne ein bisschen...
Veröffentlicht am 16.05.2023, 20:03:52 |
Lerne ein bisschen...
Veröffentlicht am 19.05.2023, 11:41:25 |
Lernen lernen
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com