Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 14970|Odpoveď: 3

[Zdroj] [Skutočný boj]. NET/C# používa SemaphoreSlim na obmedzenie súbežných metód vykonávania

[Kopírovať odkaz]
Zverejnené 19. 2. 2022 21:23:20 | | | |
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é:







Predchádzajúci:Linux Secretless Login (ssh) alebo Secretless Copy (scp) súbory na iné servery
Budúci:Linux používa lookbusy na simuláciu využitia CPU
Zverejnené 19. 2. 2022 23:16:57 |
Nauč sa učiť...
Zverejnené 20. 2. 2022 22:19:24 |
test
 Prenajímateľ| Zverejnené 18. 12. 2024 20:40:10 |
Rozdiel medzi ManualResetEvent a AutoResetEvent, ktorý sa naučili C# vlákna
https://www.itsvse.com/thread-4810-1-1.html
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com