Krav: På grund af hardwarens begrænsede ressourcer skal programmet forbruge en vis mængde hardwareressourcer; i tilfælde af høj samtidighed, hvis nogle metoder, der bruger for mange ressourcer i programmet, ikke er begrænsede (eksport af store mængder data til en Excel-tabel), kan det påvirke hele programmets manglende evne til at levere normale tjenester og også operativsystemets normale drift.
Semapfor og SemaphoreSlim Difference
SemaphoreSlim og Semaphore er ens i funktionalitet. SemaphoreSlim er cirka 4 gange hurtigere end Semaphore, men SemaphoreSlim kan ikke bruges til signalering mellem processer.
Årsagen til ydelsesforbedringen er, at SemaphoreSlim-klassen giver et letvægtsalternativ til Semaphore-klassen, som ikke bruger Windows-kerne-semaforen. Grundlæggende, hvis du ikke behøver at navngive semaforer, så brug SemaphoreSlim-klassen.
SemaphoreSlim er baseret på SpinWait og Monitor, så en tråd, der venter på at få en lås, bruger en periode af CPU-cyklusser i håb om at få låsen, før den giver plads til en anden tråd. Hvis dette ikke sker, lader tråden systemet skifte kontekst og prøve igen, når operativsystemet planlægger tråden igen (ved at bruge nogle CPU-cyklusser). Hvis ventetiden er lang, kan denne tilstand bruge mange CPU-cyklusser. Så det bedste tilfælde for denne implementering er, at der for det meste ikke er ventetid, og du kan få låsen næsten med det samme. Semaphore er afhængig af implementeringer i OS-kernen, så hver gang en lås opnås, tager det en del CPU-cyklusser, men derefter går tråden i dvale for at få den tid, det tager at få låsen.
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
Før metoden udføres, er de almindeligt anvendte ventemetoder som følgerRing ud fra den faktiske situation i din egen virksomhed!
Wait(): Blokerer tråden, indtil den kan komme ind i SemaphoreSlim. Vent(0): Metoden vil ikke blive blokeret. Den vil teste tilstanden på ventehåndtaget og returnere med det samme. Vent: Blokerer den aktuelle tråd, indtil den kan komme ind i SemaphoreSlim, mens der angives en timeout med et 32-bit signeret heltal.
Kildekoden er som følger:
Renderingerne er som følger:
|