Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 14970|Odgovoriti: 3

[Vir] [Dejanski boj]. NET/C# uporablja SemaphoreSlim za omejevanje sočasnih metod izvajanja

[Kopiraj povezavo]
Objavljeno na 19. 02. 2022 21:23:20 | | | |
Zahteve: Zaradi omejenih virov strojne opreme mora program porabiti določeno količino strojnih virov; pri visoki sočasnosti, če nekatere metode, ki porabijo preveč virov programa, niso omejene (izvoz velike količine podatkov v Excelovo tabelo), lahko to vpliva na nezmožnost celotnega programa za zagotavljanje običajnih storitev in tudi na normalno delovanje operacijskega sistema.

Semafor in SemaforSlim razlika

SemaphoreSlim in Semaphore sta podobna po funkcionalnosti. SemaphoreSlim je približno štirikrat hitrejši od Semaphore, vendar SemaphoreSlim ni mogoče uporabiti za medprocesno signalizacijo.

Razlog za izboljšanje zmogljivosti je, da razred SemaphoreSlim ponuja lahkotno alternativo razredu Semaphore, ki ne uporablja semaforja jedra Windows. V bistvu, če ni treba poimenovati semaforjev, uporabite razred SemaphoreSlim.

SemaphoreSlim temelji na SpinWait in Monitorju, tako da nit, ki čaka na zaklep, porabi nekaj CPU ciklov, v upanju, da bo pridobila zaklep, preden se prepusti drugi niti. Če se to ne zgodi, potem nit omogoči sistemu, da preklopi kontekst in poskusi znova, ko operacijski sistem ponovno razporedi to nit (z uporabo nekaj CPU ciklov). Če je čakanje dolgo, lahko ta način porabi veliko procesorskih ciklov. Najboljši primer za to implementacijo je, da večinoma ni čakalnih dob in lahko zaklep dobiš skoraj takoj.
Semaphore temelji na implementacijah v jedru OS, zato vsakič, ko pridobimo zaklep, traja kar nekaj CPU ciklov, nato pa nit preprosto hibernira, da dobi čas, ki je potreben za zaklepanje.

Dokumentacija za semaforje:https://docs.microsoft.com/en-us ... aphore?view=net-6.0
Dokumentacija SemaphoreSlim:https://docs.microsoft.com/en-us ... reslim?view=net-6.0

Pred izvajanjem metode so najpogosteje uporabljene metode čakanja naslednjePokličite glede na dejansko situacijo vašega podjetja

Wait(): Blokira temo, dokler ne vstopi v SemaphoreSlim.
Wait(0): Metoda ne bo blokirana. Preveril bo stanje čakalne ročice in se takoj vrnil.
Wait: Blokira trenutno nit, dokler ne vstopi v SemaphoreSlim, pri čemer določi časovno omejitev z uporabo 32-bitnega predznanega celega števila.

Izvorna koda je naslednja:

Upodobitve so naslednje:







Prejšnji:Linux Secretless Login (ssh) ali Secretless Copy (scp) datoteke na druge strežnike
Naslednji:Linux uporablja lookbusy za simulacijo uporabe procesorja
Objavljeno na 19. 02. 2022 23:16:57 |
Nauči se učiti...
Objavljeno na 20. 02. 2022 22:19:24 |
preizkus
 Najemodajalec| Objavljeno na 18. 12. 2024 20:40:10 |
Razlika med ManualResetEvent in AutoResetEvent, ki jo naučijo C# niti
https://www.itsvse.com/thread-4810-1-1.html
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com