Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 4864|Válasz: 4

[Forrás] 【Turn】C# többszálas párhuzamos különböző zárak alatt

[Linket másol]
Közzétéve: 2023-4-13 18:44:49 | | | |
Normál körülmények között, amíg többszálas programozásról van szó, a program összetettsége jelentősen nő, a teljesítmény jelentősen csökken, és a hibák valószínűsége jelentősen nő.

A többszálas programozás célja, hogy párhuzamosan futtassák a programot az adatfeldolgozási képességek javítása érdekében, de a legtöbb esetben versengés van a megosztott erőforrásokért, ezért az erőforrás-objektumok módosításakor zárolni kell. Ugyanakkor sokféleképpen lehet a zárokat megvalósítani, ezért nézzük meg a C#-ban több típusú zár megvalósítását és teljesítményét.

Több módja a zárak használatának

1. Atomzár

Elérni a "zár nélküli" versenyt az Interlocked atomművelet révén. ÖsszehasonlításCsere.

A hivatalos magyarázat az, hogy több szál által megosztott változók atomi műveleteit kell biztosítani. Névtér: System.Threading

2. Kritikus terület

Több szál sorozatosítása a nyilvános erőforrásokhoz vagy egy kódhoz való hozzáféréshez gyors és alkalmas az adathozzáférés szabályozására. A C# zár szintaxisa a kritikus terület (Monitor) szintaxisa sugara.

3. Atomműködés

Az atomi műveletek, amelyek különleges esetek, eleve szálbiztonságúak, így nincs szükség zárásra.

Hivatalosan úgy értelmezik, hogy egy adott változó értékét atomi művelet formájában növelik, és az eredményt tárolják. Névtér: System.Threading

4. Olvasd és írd a zárat

Az olvasás-írási zárak lehetővé teszik az erőforrások olvasását, amikor más programok írnak, így ha az erőforrás piszkos olvasásokat engedélyez, ez a megfelelőbb.

A hivatalos magyarázat egy zárolt állapotot jelöl, amelyet az erőforrás-hozzáférés kezelésére használnak, lehetővé téve a többszálas olvasást vagy exkluzív írási hozzáférést. A névtér a System.Threading

5. Szemafór

Szemafórek, amelyeket korlátozott számú felhasználói erőforrás vezérlésére terveztek.

A hivatalos magyarázat korlátozza, hogy hány szál férhet hozzá egyszerre egy erőforráshoz vagy erőforrás-poolhoz. A névtér a System.Threading

6. Események

Arra szolgál, hogy értesítse a szálat, ha események történtek, elindítva egy utódfeladat kezdetét.

A hivatalos magyarázat szerint a szálszinkronizációs események automatikusan visszaállnak, amikor egy jelet kapnak a szál kiszabadítása után. Az ilyen típusok nem öröklődhetnek.

7. Kölcsönös kizárás

Van egy Mutex osztály C#-ban, közvetlenül a System.Threading névtér alatt, a Mutex valójában mutex, amely nemcsak több szál közötti erőforrás-versenyt képes kezelni, hanem a folyamatok közötti erőforrás-versenyt is.


Teljesítményteszt kód

Futtatd a kódot

Teljesítményteszt eredmények



Megjegyzés: A fenti adatok csak a jelenlegi tesztkörnyezet hardverteljesítményének eredményei, és csak egymással lehet összehasonlítani.

1) Különböző teszteken ez a leggyorsabb, ha nem zárol, ezért próbáld elkerülni az erőforrás-versengést, ami zárt működéshez vezet.

2) Interlocked.CompareExchange következetesen kiváló teljesítményt mutat a többszálas kezelésben, a második helyen.

3) A harmadik zár, a kritikus zóna is jó teljesítményt mutat, ezért kérlek, cáfolj másokat, ha azt mondják, hogy a zár teljesítménye alacsony.

4) A negyedik hely az atomi változó (atomi) művelet, de jelenleg csak a változók önnövelését és kivonását támogatja, és az alkalmazhatóság nem erős.

5) Az ötödik olvasási/írási zár (ReaderWriterLockSlim) teljesítménye is rendben van, támogatja a semmi olvasását, és a gyakorlati minősége továbbra is viszonylag jó.

6) A megmaradt szemaforok, események és mutex a legrosszabb teljesítményűek, természetesen megvan a saját alkalmazási területük, de nem teljesítenek jól az erőforrás-versengésben.

Eredeti linkcím:A hiperlink bejelentkezés látható.





Előző:ASP.NET Core (16) Dinamikus regisztrációs szolgáltatások beépítésétől függően
Következő:A soft route OpenWrt indítása USB karton keresztül indul
 Háziúr| Közzétéve: 2023-4-13 18:46:52 |
A C# programok csak egy példánynak engedik a helyes kód futtatását
https://www.itsvse.com/thread-3391-1-1.html

A különbség a ManualResetEvent és az AutoResetEvent között, amit C# szálak tanulnak meg
https://www.itsvse.com/thread-4810-1-1.html

[Valódi harc]. A NET/C# a SemaphoreSlim-et használja az egyidejű végrehajtási módszerek korlátozására
https://www.itsvse.com/thread-10259-1-1.html

C# Olvasó/Írás Zár OlvasóÍróLockSlim használat
https://www.itsvse.com/thread-3545-1-1.html

.net/c# User multithreaded concurrency lock(string){...} Részletes magyarázat
https://www.itsvse.com/thread-7764-1-1.html
Közzétéve: 2023-4-13 19:21:44 |
Tanulj meg egy kicsit...
Közzétéve: 2023-5-16 20:03:52 |
Tanulj meg egy kicsit...
Közzétéve: 2023-5-19 11:41:25 |
Tanulj meg
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com