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

Ansehen: 14970|Antwort: 3

[Quelle] [Tatsächlicher Kampf]. NET/C# verwendet SemaphoreSlim, um gleichzeitige Ausführungsmethoden zu begrenzen

[Link kopieren]
Veröffentlicht am 19.02.2022 21:23:20 | | | |
Anforderungen: Aufgrund der begrenzten Ressourcen der Hardware muss das Programm eine bestimmte Menge an Hardwareressourcen verbrauchen; im Falle hoher Nebenläufigkeit, wenn einige Methoden, die zu viele Ressourcen des Programms benötigen, nicht eingeschränkt sind (also das Exportieren großer Datenmengen in eine Excel-Tabelle), kann dies die Unfähigkeit des gesamten Programms beeinträchtigen, normale Dienste bereitzustellen, und auch den normalen Betrieb des Betriebssystems.

Semaphor und SemaphoreSlim-Unterschied

SemaphoreSlim und Semaphore sind funktional ähnlich. SemaphoreSlim ist etwa viermal schneller als Semaphore, aber SemaphoreSlim kann nicht für Interprozess-Signalisierung verwendet werden.

Der Grund für die Leistungsverbesserung ist, dass die SemaphoreSlim-Klasse eine leichte Alternative zur Semaphore-Klasse bietet, die den Windows-Kernel-Semaphor nicht verwendet. Im Grunde, wenn du keine Semaphore benennen musst, verwende die Klasse SemaphoreSlim.

SemaphoreSlim basiert auf SpinWait und Monitor, sodass ein Thread, der auf eine Sperre wartet, eine Phase von CPU-Zyklen benötigt, in der Hoffnung, die Sperre zu erhalten, bevor er einem anderen Thread Platz macht. Wenn das nicht passiert, lässt der Thread das System den Kontext wechseln und es erneut versuchen, wenn das Betriebssystem den Thread erneut terminiert (indem es einige CPU-Zyklen verbraucht). Wenn die Wartezeit lang ist, kann dieser Modus viele CPU-Zyklen beanspruchen. Der beste Fall für diese Implementierung ist also, dass es meistens keine Wartezeit gibt und man das Schloss fast sofort bekommt.
Semaphore basiert auf Implementierungen im OS-Kernel, sodass jedes Mal, wenn eine Sperre ermittelt wird, einige CPU-Zyklen benötigt, aber danach geht der Thread einfach in den Winterschlaf, um die benötigte Zeit für die Sperre zu erhalten.

Semaphor-Dokumentation:https://docs.microsoft.com/en-us ... aphore?view=net-6.0
SemaphoreSlim Dokumentation:https://docs.microsoft.com/en-us ... reslim?view=net-6.0

Vor der Ausführung der Methode sind die gebräuchlichsten Wartemethoden wie folgtRufen Sie entsprechend der tatsächlichen Situation Ihres eigenen Unternehmens an

Wait(): Blockiert den Thread, bis er in SemaphoreSlim eintreten kann.
Warte(0): Die Methode wird nicht blockiert. Es wird den Zustand des Wartegriffs testen und sofort zurückkommen.
Warte: Blockiert den aktuellen Thread, bis er in SemaphoreSlim eintreten kann, während ein Timeout mit einer 32-Bit-Ganzzahl angegeben wird.

Der Quellcode ist wie folgt:

Die Darstellungen sind wie folgt:







Vorhergehend:Linux Secretless Login (ssh) oder Secretless Copy (scp) Dateien auf andere Server
Nächster:Linux verwendet Lookbusy, um die CPU-Nutzung zu simulieren
Veröffentlicht am 19.02.2022 23:16:57 |
Lerne zu lernen...
Veröffentlicht am 20.02.2022 22:19:24 |
Test
 Vermieter| Veröffentlicht am 18.12.2024 20:40:10 |
Der Unterschied zwischen ManualResetEvent und AutoResetEvent wird von C#-Threads gelernt
https://www.itsvse.com/thread-4810-1-1.html
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