Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 14970|Svar: 3

[Källa] [Verklig strid]. NET/C# använder SemaphoreSlim för att begränsa samtidiga exekveringsmetoder

[Kopiera länk]
Publicerad på 2022-02-19 21:23:20 | | | |
Krav: På grund av hårdvarans begränsade resurser måste programmet förbruka en viss mängd hårdvaruresurser, och vid hög samtidighet, om vissa metoder som förbrukar för mycket resurser i programmet inte är begränsade (att exportera stora mängder data till en Excel-tabell), kan det påverka hela programmets oförmåga att tillhandahålla normala tjänster och även operativsystemets normala funktion.

Semafor och SemaforSlim-skillnad

SemaphoreSlim och Semaphore är liknande i funktionalitet. SemaphoreSlim är ungefär fyra gånger snabbare än Semaphore, men SemaphoreSlim kan inte användas för signalering mellan processer.

Anledningen till prestandaförbättringen är att SemaphoreSlim-klassen erbjuder ett lättviktigt alternativ till Semaphore-klassen, som inte använder Windows kernel-semafor. I princip, om du inte behöver namnge semaforer, använd klassen SemaphoreSlim.

SemaphoreSlim är baserat på SpinWait och Monitor, så en tråd som väntar på att få ett lås förbrukar en period av CPU-cykler i hopp om att få låset innan den ger plats åt en annan tråd. Om detta inte händer låter tråden systemet byta kontext och försöka igen när operativsystemet schemalägger tråden igen (genom att förbruka några CPU-cykler). Om väntan är lång kan detta läge ta många CPU-cykler. Så det bästa fallet för denna implementering är att det oftast inte finns någon väntetid och du kan få låset nästan omedelbart.
Semaphore bygger på implementationer i OS-kärnan, så varje gång ett lås erhålls tar det ganska många CPU-cykler, men efter det går tråden helt enkelt i viloläge för att få den tid det tar att få låset.

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

Innan metoden körs är de vanligaste väntemetoderna följande.Ring utifrån den faktiska situationen i ditt eget företag

Wait(): Blockerar tråden tills den kan gå in i SemaphoreSlim.
Vänta(0): Metoden kommer inte att blockeras. Den testar tillståndet på vänthandtaget och återkommer omedelbart.
Vänta: Blockerar den aktuella tråden tills den kan gå in i SemaphoreSlim, samtidigt som en timeout anges med ett 32-bitars signerat heltal.

Källkoden är följande:

Renderingarna är följande:







Föregående:Linux Secretless Login (ssh) eller Secretless Copy (scp) filer till andra servrar
Nästa:Linux använder lookbusy för att simulera CPU-användning
Publicerad på 2022-02-19 23:16:57 |
Lär dig att lära dig...
Publicerad på 2022-02-20 22:19:24 |
test
 Hyresvärd| Publicerad på 2024-12-18 20:40:10 |
Skillnaden mellan ManualResetEvent och AutoResetEvent lärd sig av C#-trådar
https://www.itsvse.com/thread-4810-1-1.html
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com