Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 14970|Svar: 3

[Kilde] [Egentlig kamp]. NET/C# bruger SemaphoreSlim til at begrænse samtidige eksekveringsmetoder

[Kopier link]
Opslået på 19/02/2022 21.23.20 | | | |
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:







Tidligere:Linux Secretless Login (ssh) eller Secretless Copy (scp) filer til andre servere
Næste:Linux bruger lookbusy til at simulere CPU-brug
Opslået på 19/02/2022 23.16.57 |
Lær at lære...
Opslået på 20/02/2022 22.19.24 |
test
 Udlejer| Opslået på 18/12/2024 20.40.10 |
Forskellen mellem ManualResetEvent og AutoResetEvent læres af C#-tråde
https://www.itsvse.com/thread-4810-1-1.html
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com