Cerințe: Din cauza resurselor limitate ale hardware-ului, programul trebuie să consume o anumită cantitate de resurse hardware; în cazul concurenței ridicate, dacă unele metode care consumă prea multe resurse ale programului nu sunt restricționate (exportarea unei cantități mari de date într-un tabel Excel), acest lucru poate afecta incapacitatea întregului program de a furniza servicii normale și, de asemenea, funcționarea normală a sistemului de operare.
Semaforul și SemaforulDiferențe subțiri
SemaphoreSlim și Semaphore sunt similare ca funcționalitate. SemaphoreSlim este de aproximativ 4 ori mai rapid decât Semaphore, dar SemaphoreSlim nu poate fi folosit pentru semnalizare între procese.
Motivul îmbunătățirii performanței este că clasa SemaphoreSlim oferă o alternativă ușoară la clasa Semaphore, care nu folosește semaforul nucleului Windows. Practic, dacă nu trebuie să denumești semafore, folosește clasa SemaphoreSlim.
SemaphoreSlim se bazează pe SpinWait și Monitor, așa că un fir de discuție care așteaptă să primească un blocaj consumă o perioadă de cicluri CPU, sperând să obțină blocajul înainte de a ceda locul altui fir. Dacă acest lucru nu se întâmplă, atunci thread-ul permite sistemului să schimbe contextul și să încerce din nou când sistemul de operare programează din nou acel thread (consumând câteva cicluri de procesor). Dacă așteptarea este lungă, acest mod poate consuma multe cicluri de procesor. Deci, cel mai bun caz pentru această implementare este că de cele mai multe ori nu există timp de așteptare și poți obține blocarea aproape imediat. Semaphore se bazează pe implementări în nucleul sistemului de operare, așa că de fiecare dată când se obține un blocaj, durează destul de multe cicluri CPU, dar după aceea firul pur și simplu hibernează pentru a obține timpul necesar pentru blocare.
Documentarea semaforului:https://docs.microsoft.com/en-us ... aphore?view=net-6.0 Documentația SemaphoreSlim:https://docs.microsoft.com/en-us ... reslim?view=net-6.0
Înainte de a executa metoda, metodele de așteptare utilizate frecvent sunt următoareleSună în funcție de situația reală a afacerii tale!
Wait(): Blochează firul până când poate intra în SemaphoreSlim. Așteaptă(0): Metoda nu va fi blocată. Va testa starea presei de așteptare și va reveni imediat. Așteptare: Blochează firul curent până când acesta poate intra în SemaphoreSlim, specificând un timeout folosind un întreg semnat pe 32 de biți.
Codul sursă este următorul:
Randările sunt următoarele:
|