Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 14970|Svare: 3

[Kilde] [Faktisk kamp]. NET/C# bruker SemaphoreSlim for å begrense samtidige utførelsesmetoder

[Kopier lenke]
Publisert på 19.02.2022 21:23:20 | | | |
Krav: På grunn av maskinvarens begrensede ressurser må programmet bruke en viss mengde maskinvareressurser; ved høy samtidighet, hvis noen metoder som bruker for mye ressurser i programmet ikke er begrenset (eksport av store datamengder til en Excel-tabell), kan det påvirke hele programmets manglende evne til å levere normale tjenester, og også operativsystemets normale drift.

Semapfor og SemaphoreSlim Forskjell

SemaphoreSlim og Semaphore er like i funksjonalitet. SemaphoreSlim er omtrent fire ganger raskere enn Semaphore, men SemaphoreSlim kan ikke brukes til signalering mellom prosesser.

Årsaken til ytelsesforbedringen er at SemaphoreSlim-klassen gir et lett alternativ til Semaphore-klassen, som ikke bruker Windows-kjernens semafor. I bunn og grunn, hvis du ikke trenger å navngi semaforer, bruk SemaphoreSlim-klassen.

SemaphoreSlim er basert på SpinWait og Monitor, så en tråd som venter på å få en lås bruker en periode med CPU-sykluser, i håp om å få tak i låsen før den gir plass til en annen tråd. Hvis dette ikke skjer, lar tråden systemet bytte kontekst og prøve igjen når operativsystemet planlegger tråden igjen (ved å bruke noen CPU-sykluser). Hvis ventetiden er lang, kan denne modusen bruke mange CPU-sykluser. Så det beste tilfellet for denne implementeringen er at det som regel ikke er noen ventetid, og du kan få låsen nesten umiddelbart.
Semaphore er avhengig av implementasjoner i OS-kjernen, så hver gang en lås oppnås, tar det ganske mange CPU-sykluser, men etter det går tråden bare i dvale for å få tiden det tar å få låsen.

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

Før metoden kjøres, er de mest brukte ventemetodene som følgerRing ut fra den faktiske situasjonen i din egen virksomhet

Vent(): Blokkerer tråden til den kan gå inn i SemaphoreSlim.
Vent(0): Metoden vil ikke bli blokkert. Den vil teste tilstanden til ventehåndtaket og returnere umiddelbart.
Vent: Blokkerer den nåværende tråden til den kan gå inn i SemaphoreSlim, samtidig som den spesifiserer en timeout med et 32-bits signert heltall.

Kildekoden er som følger:

Gjengivelsene er som følger:







Foregående:Linux Secretless Login (ssh) eller Secretless Copy (scp) filer til andre servere
Neste:Linux bruker lookbusy for å simulere CPU-bruk
Publisert på 19.02.2022 23:16:57 |
Lær å lære...
Publisert på 20.02.2022 22:19:24 |
prøve
 Vert| Publisert på 18.12.2024 20:40:10 |
Forskjellen mellom ManualResetEvent og AutoResetEvent læres gjennom C#-tråder
https://www.itsvse.com/thread-4810-1-1.html
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com