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:
|