Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 14970|Antwoord: 3

[Bron] [Echte gevechten]. NET/C# gebruikt SemaphoreSlim om gelijktijdige uitvoeringsmethoden te beperken

[Link kopiëren]
Geplaatst op 19-02-2022 21:23:20 | | | |
Vereisten: Door de beperkte hardwaremiddelen moet het programma een bepaalde hoeveelheid hardwarebronnen verbruiken; in het geval van hoge gelijktijdigheid, als sommige methoden die te veel middelen van het programma verbruiken niet beperkt zijn (zoals het exporteren van een grote hoeveelheid data naar een Excel-tabel), kan dit het onvermogen van het hele programma om normale diensten te leveren beïnvloeden en ook de normale werking van het besturingssysteem beïnvloeden.

Semafor en SemaforeSlim Verschil

SemaphoreSlim en Semaphore zijn qua functionaliteit vergelijkbaar. SemaphoreSlim is ongeveer 4 keer sneller dan Semaphore, maar SemaphoreSlim kan niet worden gebruikt voor interprocessignalering.

De reden voor de prestatieverbetering is dat de SemaphoreSlim-klasse een lichtgewicht alternatief biedt voor de Semaphore-klasse, die de Windows-kernelsemafoor niet gebruikt. Als je geen namen nodig hebt, gebruik dan de SemaphoreSlim-klasse.

SemaphoreSlim is gebaseerd op SpinWait en Monitor, dus een thread die wacht om een lock te krijgen, neemt een periode van CPU-cycli in beslag in de hoop de lock te verkrijgen voordat hij plaatsmaakt voor een andere thread. Als dit niet gebeurt, laat de thread het systeem de context wisselen en het opnieuw proberen wanneer het besturingssysteem die thread opnieuw plant (door enkele CPU-cycli te gebruiken). Als de wachttijd lang is, kan deze modus veel CPU-cycli in beslag nemen. Dus het beste scenario voor deze implementatie is dat er meestal geen wachttijd is en je het slot vrijwel direct kunt krijgen.
Semaphore is afhankelijk van implementaties in de OS-kernel, dus elke keer dat een lock wordt verkregen, kost het behoorlijk wat CPU-cycli, maar daarna gaat de thread gewoon in winterslaap om de tijd te krijgen die nodig is om de lock te krijgen.

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

Voordat de methode wordt uitgevoerd, zijn de meest gebruikte wachtmethoden als volgtBel op basis van de werkelijke situatie van je eigen bedrijf

Wait(): Blokkeert de thread totdat deze SemaphoreSlim kan binnengaan.
Wacht(0): De methode wordt niet geblokkeerd. Het test de staat van het wachtende handvat en komt direct terug.
Wacht: Blokkeert de huidige thread totdat deze SemaphoreSlim kan binnengaan, terwijl een timeout wordt gespecificeerd met een 32-bits getekend geheel.

De broncode is als volgt:

De renderings zijn als volgt:







Vorig:Linux Secretless Login (ssh) of Secretless Copy (scp) bestanden naar andere servers
Volgend:Linux gebruikt lookbusy om het CPU-gebruik te simuleren
Geplaatst op 19-02-2022 23:16:57 |
Leer leren...
Geplaatst op 20-02-2022 22:19:24 |
test
 Huisbaas| Geplaatst op 18-12-2024 20:40:10 |
Het verschil tussen ManualResetEvent en AutoResetEvent wordt geleerd door C#-threads
https://www.itsvse.com/thread-4810-1-1.html
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com