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í:
|