Požiadavky: Vzhľadom na obmedzené zdroje hardvéru musí program spotrebovať určité množstvo hardvérových zdrojov, v prípade vysokej súbežnosti, ak niektoré metódy, ktoré spotrebúvajú príliš veľa zdrojov programu, nie sú obmedzené (export veľkého množstva dát do tabuľky Excel), môže to ovplyvniť neschopnosť celého programu poskytovať bežné služby a tiež normálny chod operačného systému.
Semafor a SemaforŠtíhly rozdiel
SemaphoreSlim a Semaphore sú funkčne podobné. SemaphoreSlim je približne 4-krát rýchlejší ako Semaphore, ale SemaphoreSlim nie je možné použiť na medziprocesovú signalizáciu.
Dôvodom zlepšenia výkonu je, že trieda SemaphoreSlim poskytuje ľahkú alternatívu k triede Semaphore, ktorá nepoužíva jadrový semafor Windows. V podstate, ak nepotrebujete pomenovať semafory, použite triedu SemaphoreSlim.
SemaphoreSlim je založený na SpinWait a Monitor, takže vlákno čakajúce na zámok spotrebuje určitý čas CPU cyklov, dúfajúc, že získa zámok predtým, než uvoľní miesto ďalšiemu vláknu. Ak sa to nestane, vlákno umožní systému prepnúť kontext a skúsiť to znova, keď OS opäť naplánuje toto vlákno (spotrebou niekoľkých CPU cyklov). Ak je čakanie dlhé, tento režim môže spotrebovať veľa CPU cyklov. Najlepší prípad tejto implementácie je, že väčšinou nie je žiadne čakanie a zámok môžete získať takmer okamžite. Semaphore sa spolieha na implementácie v jadre operačného systému, takže pri každom získaní zámku trvá dosť veľa CPU cyklov, ale potom vlákno jednoducho hibernuje, aby získalo čas potrebný na získanie zámku.
Dokumentácia semaforu:https://docs.microsoft.com/en-us ... aphore?view=net-6.0 Dokumentácia SemaphoreSlim:https://docs.microsoft.com/en-us ... reslim?view=net-6.0
Pred vykonaním metódy sú bežne používané metódy čakania nasledovnéVolajte podľa aktuálnej situácie vášho podnikania!
Wait(): Blokuje vlákno, kým nemôže vstúpiť do SemaphoreSlim. Wait(0): Metóda nebude zablokovaná. Otestuje stav čakacej páky a okamžite sa vráti. Wait: Blokuje aktuálne vlákno, kým nemôže vstúpiť do SemaphoreSlim, pričom časový limit určuje pomocou 32-bitového podpísaného celého čísla.
Zdrojový kód je nasledovný:
Vizualizácie sú nasledovné:
|