Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 14970|Risposta: 3

[Fonte] [Combattimento vero e proprio]. NET/C# utilizza SemaphoreSlim per limitare i metodi di esecuzione concorrente

[Copiato link]
Pubblicato su 19/02/2022 21:23:20 | | | |
Requisiti: A causa delle risorse limitate dell'hardware, il programma deve consumare una certa quantità di risorse hardware; in caso di alta concorrenza, se alcuni metodi che consumano troppe risorse del programma non sono limitati (esportando una grande quantità di dati in una tabella Excel), ciò può influire sull'incapacità dell'intero programma di fornire servizi normali e anche sul normale funzionamento del sistema operativo.

Semaforo e SemaforoDifferenza sottile

SemaphoreSlim e Semaphore sono simili nella funzionalità. SemaphoreSlim è circa 4 volte più veloce di Semaphore, ma SemaphoreSlim non può essere usato per la segnalazione inter-processo.

Il motivo del miglioramento delle prestazioni è che la classe SemaphoreSlim offre un'alternativa leggera alla classe Semaphore, che non utilizza il semaforo del kernel di Windows. In sostanza, se non hai bisogno di dare nomi ai semafori, usa la classe SemaphoreSlim.

SemaphoreSlim si basa su SpinWait e Monitor, quindi un thread in attesa di ottenere un blocco consuma un periodo di cicli della CPU, sperando di ottenere il blocco prima di lasciare il posto a un altro thread. Se questo non accade, allora il thread permette al sistema di cambiare contesto e riprovare quando il sistema operativo programmerà di nuovo quel thread (consumando alcuni cicli della CPU). Se l'attesa è lunga, questa modalità può consumare molti cicli della CPU. Quindi il miglior caso per questa implementazione è che la maggior parte delle volte non c'è tempo di attesa e puoi ottenere il blocco quasi immediatamente.
Semaphore si basa sulle implementazioni nel kernel del sistema operativo, quindi ogni volta che si acquisisce un lock, ci vogliono parecchi cicli di CPU, ma dopo di che il thread semplicemente iberna per ottenere il tempo necessario per ottenere il lock.

Documentazione dei semafori:https://docs.microsoft.com/en-us ... aphore?view=net-6.0
Documentazione di SemaphoreSlim:https://docs.microsoft.com/en-us ... reslim?view=net-6.0

Prima di eseguire il metodo, i metodi di attesa comunemente usati sono i seguentiChiama in base alla situazione reale della tua attività

Wait(): Blocca il thread finché non può entrare in SemaphoreSlim.
Wait(0): Il metodo non sarà bloccato. Testerà lo stato della maniglia in attesa e tornerà immediatamente.
Wait: Blocca il thread corrente finché non può entrare in SemaphoreSlim, specificando un timeout usando un intero con segnale a 32 bit.

Il codice sorgente è il seguente:

Le rappresentazioni sono le seguenti:







Precedente:Linux Secret Less Login (ssh) o Secretless Copy (scp) verso altri server
Prossimo:Linux utilizza lookbusy per simulare l'uso della CPU
Pubblicato su 19/02/2022 23:16:57 |
Impara a imparare...
Pubblicato su 20/02/2022 22:19:24 |
test
 Padrone di casa| Pubblicato su 18/12/2024 20:40:10 |
La differenza tra ManualResetEvent e AutoResetEvent appreso dai thread C#
https://www.itsvse.com/thread-4810-1-1.html
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com