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