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

Pohľad: 4864|Odpoveď: 4

[Zdroj] 【Turn】C# viacvláknová súbežnosť pod rôznymi zámkami

[Kopírovať odkaz]
Zverejnené 13. 4. 2023 o 18:44:49 | | | |
Za normálnych okolností, pokiaľ je zapojené viacvláknové programovanie, zložitosť programu sa výrazne zvýši, výkon výrazne klesne a pravdepodobnosť chýb sa výrazne zvýši.

Viacvláknové programovanie je určené na paralelné spúšťanie programu na zlepšenie schopností spracovania dát, ale vo väčšine prípadov ide o súťaž o zdieľané zdroje, preto musí byť uzamknuté pri úprave objektov zdrojov. Existuje však mnoho spôsobov, ako implementovať zámky, preto sa pozrime na implementáciu a výkon viacerých typov zámkov v C#.

Niekoľko spôsobov použitia zámkov

1. Atómový zámok

Dosiahnuť "bezlockovú" konkurenciu prostredníctvom atómovej operácie Interlocked.CompareExchange.

Oficiálne vysvetlenie je poskytnúť atómové operácie pre premenné zdieľané viacerými vláknami. Menný priestor: System.Threading

2. Kritická oblasť

Serializácia viacerých vlákien na prístup k verejným zdrojom alebo kódu je rýchla a vhodná na kontrolu prístupu k dátam. Zámková syntax v C# je syntax sugar pre kritickú oblasť (Monitor).

3. Atómová prevádzka

Atómové operácie, ktoré sú špeciálnym prípadom, sú inherentne bezpečné pre vlákna, takže ich nie je potrebné zamykať.

Oficiálne interpretované ako zvýšenie hodnoty danej premennej vo forme atómovej operácie a uloženie výsledku. Menný priestor: System.Threading

4. Zámok čítania a zápisu

Zámky na čítanie a zápis umožňujú čítať zdroje, keď iné programy píšu, takže ak zdroj umožňuje nesprávne čítanie, je to vhodnejšie.

Oficiálne vysvetlenie uvádza uzamknutý stav používaný na správu prístupu k zdrojom, čo umožňuje viacvláknové čítanie alebo exkluzívny zápis. Menný priestor je System.Threading

5. Semafor

Semafory, navrhnuté na kontrolu obmedzeného počtu používateľských zdrojov.

Oficiálne vysvetlenie obmedzuje počet vlákien, ktoré môžu súčasne pristupovať k zdrojom alebo zdrojovému fondu. Menný priestor je System.Threading

6. Podujatia

Používa sa na upozornenie vlákna, že sa vyskytli určité udalosti, čím sa spustí začiatok následnej úlohy.

Oficiálne vysvetlenie uvádza, že udalosti synchronizácie vlákien sa automaticky resetujú, keď je signál prijatý po uvoľnení vlákna. Takéto typy sa nedajú dediť.

7. Vzájomné vylúčenie

Existuje trieda Mutex v C#, hneď pod menným priestorom System.threading, Mutex je v skutočnosti mutex, ktorý dokáže nielen riešiť konkurenciu zdrojov medzi viacerými vláknami, ale aj konkurenciu zdrojov medzi procesmi.


Kód na testovanie výkonu

Spustiť kód

Výsledky výkonnostných testov



Poznámka: Vyššie uvedené údaje sú len výsledkom hardvérového výkonu aktuálneho testovacieho prostredia a môžu byť porovnávané len medzi sebou.

1) V rôznych testoch je určite najrýchlejšie, keď sa nezamkne, takže sa snažte vyhnúť konkurencii zdrojov, ktorá vedie k uzamknutej prevádzke.

2) Interlocked.CompareExchange konzistentne vykazuje lepší výkon v multithreadingu a je druhý.

3) Tretí zámok, kritická zóna, tiež ukazuje dobrý výkon, preto prosím vyvrátite ostatných, ktorí tvrdia, že výkon zámku je nízky.

4) Štvrtým miestom je operácia atómových premenných (atómová), ale v súčasnosti podporuje iba samo-zvyšovanie a odčítanie premenných, pričom jeho použiteľnosť nie je silná.

5) Výkon piateho zámku na čítanie/zápis (ReaderWriterLockSlim) je tiež v poriadku, podporuje čítanie ničoho a praktickosť je stále relatívne dobrá.

6) Zvyšné semafory, podujatia a mutex majú samozrejme najhorší výkon, majú svoj vlastný rozsah využitia, ale nefungujú dobre pri konkurencii zdrojov.

Pôvodná adresa odkazu:Prihlásenie na hypertextový odkaz je viditeľné.





Predchádzajúci:ASP.NET Jadro (16) Závislé od injekcie dynamických registračných služieb
Budúci:Soft route OpenWrt sa spustí cez USB kľúč
 Prenajímateľ| Zverejnené 13. 4. 2023 o 18:46:52 |
Programy v C# umožňujú len jednej inštancii spustiť správny kód
https://www.itsvse.com/thread-3391-1-1.html

Rozdiel medzi ManualResetEvent a AutoResetEvent, ktorý sa naučili C# vlákna
https://www.itsvse.com/thread-4810-1-1.html

[Skutočný boj]. NET/C# používa SemaphoreSlim na obmedzenie súbežných metód vykonávania
https://www.itsvse.com/thread-10259-1-1.html

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

.net/c# Užívateľský viacvláknový súbežný zámok (reťazec){...} Podrobné vysvetlenie
https://www.itsvse.com/thread-7764-1-1.html
Zverejnené 13. 4. 2023 o 19:21:44 |
Nauč sa trochu...
Zverejnené 16. 5. 2023 20:03:52 |
Nauč sa trochu...
Zverejnené 19.5.2023 o 11:41:25 |
Naučte sa učiť
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