Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 14970|Odpověď: 3

[Zdroj] [Skutečný boj]. NET/C# používá SemaphoreSlim k omezení metod současného vykonávání

[Kopírovat odkaz]
Zveřejněno 19.02.2022 21:23:20 | | | |
Požadavky: Kvůli omezeným zdrojům hardwaru musí program spotřebovávat určité množství hardwarových zdrojů; v případě vysoké souběžnosti, pokud některé metody, které spotřebovávají příliš mnoho zdrojů programu, nejsou omezeny (export velkého množství dat do tabulky Excel), může to ovlivnit neschopnost celého programu poskytovat běžné služby a také normální provoz operačního systému.

Semafor a SemaphoreSlim Difference

SemaphoreSlim a Semaphore jsou funkčně podobné. SemaphoreSlim je asi čtyřikrát rychlejší než Semaphore, ale SemaphoreSlim nelze použít pro meziprocesovou signalizaci.

Důvodem zlepšení výkonu je, že třída SemaphoreSlim poskytuje lehkou alternativu ke třídě Semaphore, která nepoužívá jádrový semafor Windows. V podstatě, pokud nepotřebujete pojmenovávat semafory, použijte třídu SemaphoreSlim.

SemaphoreSlim je založen na SpinWait a Monitoru, takže vlákno čekající na zámek spotřebuje několik cyklů CPU, doufajíc, že ho získají, než uvolní místo jinému vláknu. Pokud se to nestane, vlákno umožní systému přepnout kontext a zkusit to znovu, když OS znovu naplánuje toto vlákno (spotřebou několika cyklů CPU). Pokud je čekání dlouhé, tento režim může spotřebovat hodně CPU cyklů. Nejlepší případ této implementace je, že většinou není žádná čekací doba a zámek můžete získat téměř okamžitě.
Semaphore spoléhá na implementace v jádru OS, takže pokaždé, když je zámek získán, trvá to poměrně dost CPU cyklů, ale poté vlákno jednoduše hibernuje, aby získalo čas potřebný k získání zámku.

Dokumentace semaforu:https://docs.microsoft.com/en-us ... aphore?view=net-6.0
Dokumentace SemaphoreSlim:https://docs.microsoft.com/en-us ... reslim?view=net-6.0

Před vykonáním metody jsou běžně používané metody čekání následujícíZavolejte podle skutečné situace vašeho podnikání

Wait(): Zablokuje vlákno, dokud nemůže vstoupit do SemaphoreSlim.
Wait(0): Metoda nebude zablokována. Otestuje stav čekací páky a okamžitě se vrátí.
Wait: Blokuje aktuální vlákno, dokud nemůže vstoupit do SemaphoreSlim, přičemž specifikuje časový limit pomocí 32bitového podepsaného celého čísla.

Zdrojový kód je následující:

Vizualizace jsou následující:







Předchozí:Linux Secretless Login (ssh) nebo Secretless Copy (scp) soubory na jiné servery
Další:Linux používá lookbusy k simulaci využití CPU
Zveřejněno 19.02.2022 23:16:57 |
Uč se učit...
Zveřejněno 20.02.2022 22:19:24 |
test
 Pronajímatel| Zveřejněno 18.12.2024 20:40:10 |
Rozdíl mezi ManualResetEvent a AutoResetEvent, který se naučily C# vlákna
https://www.itsvse.com/thread-4810-1-1.html
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com