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