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: 4864|Odpověď: 4

[Zdroj] 【Turn】C# vícevláknová souběžnost pod různými zámky

[Kopírovat odkaz]
Zveřejněno 13. 4. 2023 18:44:49 | | | |
Za normálních okolností, pokud je zapojeno vícevláknové programování, složitost programu výrazně vzroste, výkon výrazně klesne a pravděpodobnost chyb se výrazně zvýší.

Vícevláknové programování je určeno k paralelnímu spuštění programu za účelem zlepšení schopností zpracování dat, ale ve většině případů jde o soutěž o sdílené zdroje, proto musí být při úpravě objektů zdrojů uzamčeno. Existuje však mnoho způsobů, jak zámky implementovat, proto se podívejme na implementaci a výkon několika typů zámků v C#.

Několik způsobů, jak zámky využít

1. Atomový zámek

Dosáhnout "bezzámkové" konkurence prostřednictvím atomové operace Interlocked.CompareExchange.

Oficiální vysvětlení je poskytnout atomové operace pro proměnné sdílené více vlákny. Jmenný prostor: System.Threading

2. Kritická oblast

Serializace více vláken pro přístup k veřejným zdrojům nebo kódu je rychlá a vhodná pro řízení přístupu k datům. Zámková syntaxe v C# je syntaxový cukr pro kritickou oblast (Monitor).

3. Atomární operace

Atomické operace, které jsou speciálním případem, jsou ze své podstaty bezvláknové, takže není potřeba je zamykat.

Oficiálně interpretováno jako zvýšení hodnoty dané proměnné ve formě atomové operace a uložení výsledku. Jmenný prostor: System.Threading

4. Zámek čtení a zápisu

Locky pro čtení a zápis umožňují čtení zdrojů, když jiné programy píší, takže pokud zdroj umožňuje nekvalitní čtení, je to vhodnější.

Oficiální vysvětlení uvádí uzamčený stav používaný ke správě přístupu ke zdrojům, což umožňuje vícevláknové čtení nebo exkluzivní zápis. Jmenný prostor je System.Threading

5. Semafor

Semafory, navržené k řízení omezeného počtu uživatelských zdrojů.

Oficiální vysvětlení omezuje počet vláken, která mohou současně přistupovat ke zdroji nebo zdrojovému fondu. Jmenný prostor je System.Threading

6. Události

Používá se k upozornění vlákna, že došlo k některým událostem, čímž se zahajuje zahájení následné úlohy.

Oficiální vysvětlení uvádí, že synchronizační události vláken se automaticky resetují, když je signál přijat po uvolnění vlákna. Takové typy nelze dědit.

7. Vzájemné vyloučení

V C# je třída Mutex, hned pod jmenným prostorem System.threading, Mutex je ve skutečnosti mutex, který dokáže nejen řešit konkurenci zdrojů mezi více vlákny, ale také soutěž zdrojů mezi procesy.


Kód pro testování výkonu

Spusť kód

Výsledky výkonnostních testů



Poznámka: Výše uvedená data jsou pouze výsledkem hardwarového výkonu aktuálního testovacího prostředí a lze je pouze mezi sebou porovnávat.

1) V různých testech je rozhodně nejrychlejší nezamknout, takže se snažte vyhnout konkurenci zdrojů, která vede k uzamčenému provozu.

2) Propojené.CompareExchange konzistentně vykazuje lepší výkon v vícevláknovém zpracování a je druhý.

3) Třetí zámek, kritická zóna, také vykazuje dobrý výkon, proto prosím vyvracejte ostatní, když říkají, že výkon zámku je nízký.

4) Čtvrtým místem je operace s atomickými proměnnými (atomic), ale v současnosti podporuje pouze samo-zvyšování a odečítání proměnných, přičemž použitelnost není silná.

5) Výkon pátého zámku čtení/zápisu (ReaderWriterLockSlim) je také v pořádku, podporuje čtení ničeho a praktičnost je stále relativně dobrá.

6) Zbývající semafory, události a mutex mají samozřejmě nejhorší výkon, mají svůj vlastní rozsah použití, ale nefungují dobře v boji o zdroje.

Původní adresa odkazu:Přihlášení k hypertextovému odkazu je viditelné.





Předchozí:ASP.NET Jádro (16) Závislé na injekci dynamických registračních služeb
Další:Soft route OpenWrt se spustí přes USB flash disk
 Pronajímatel| Zveřejněno 13. 4. 2023 18:46:52 |
Programy v C# umožňují pouze jedné instanci spustit správný kód
https://www.itsvse.com/thread-3391-1-1.html

Rozdíl mezi ManualResetEvent a AutoResetEvent, který se naučily C# vlákna
https://www.itsvse.com/thread-4810-1-1.html

[Skutečný boj]. NET/C# používá SemaphoreSlim k omezení metod současného vykonávání
https://www.itsvse.com/thread-10259-1-1.html

C# Read/Write Lock ReaderWriterPoužití LockSlim
https://www.itsvse.com/thread-3545-1-1.html

.net/c# Uživatelský vícevláknový souběžný zámek(string){...} Podrobné vysvětlení
https://www.itsvse.com/thread-7764-1-1.html
Zveřejněno 13. 4. 2023 19:21:44 |
Trochu se nauč...
Zveřejněno 16. 5. 2023 20:03:52 |
Trochu se nauč...
Zveřejněno 19. 5. 2023 11:41:25 |
Učte se učit
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