Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 4864|Atbildi: 4

[Avots] 【Pagriezt】 C# vairāku pavedienu vienlaicīgums zem dažādām slēdzenēm

[Kopēt saiti]
Publicēts 2023-4-13 18:44:49 | | | |
Normālos apstākļos, kamēr ir iesaistīta vairāku pavedienu programmēšana, programmas sarežģītība ievērojami palielināsies, veiktspēja ievērojami samazināsies, un kļūdu varbūtība ievērojami palielināsies.

Daudzpavedienu programmēšana ir paredzēta, lai paralēli palaistu programmu, lai uzlabotu datu apstrādes iespējas, bet vairumā gadījumu tā ietver konkurenci par koplietojamiem resursiem, tāpēc, modificējot resursu objektus, tā ir jābloķē. Tomēr ir daudz veidu, kā ieviest slēdzenes, tāpēc apskatīsim vairāku veidu slēdzeņu ieviešanu un veiktspēju C#.

Vairāki veidi, kā izmantot slēdzenes

1. Atomu slēdzene

Panākt "bezbloķēšanas" konkurenci, izmantojot atomu operāciju Interlocked.CompareExchange.

Oficiālais skaidrojums ir nodrošināt atomu operācijas mainīgajiem, kas ir kopīgi ar vairākiem pavedieniem. Nosaukumvieta: System.Threading

2. Kritiskā zona

Vairāku pavedienu serializācija, lai piekļūtu publiskajiem resursiem vai koda daļai, ir ātra un piemērota datu piekļuves kontrolei. Slēdzenes sintakse C# ir kritiskā apgabala (monitora) sintakses cukurs.

3. Atomu darbība

Atomoperācijas, kas ir īpašs gadījums, pēc būtības ir drošas pavedieniem, tāpēc nav nepieciešams tās bloķēt.

Oficiāli interpretēts kā noteikta mainīgā vērtības palielināšana atomu operācijas veidā un rezultāta glabāšana. Nosaukumvieta: System.Threading

4. Lasīšanas un rakstīšanas bloķēšana

Lasīšanas-rakstīšanas slēdzenes ļauj lasīt resursus, kad raksta citas programmas, tāpēc, ja resurss atļauj netīru lasīšanu, tas ir piemērotāks.

Oficiālais skaidrojums norāda uz bloķētu stāvokli, ko izmanto, lai pārvaldītu piekļuvi resursiem, iespējojot vairāku pavedienu lasīšanu vai ekskluzīvu rakstīšanas piekļuvi. Nosaukumvieta ir System.Threading

5. Semafors

Semafori, kas paredzēti, lai kontrolētu ierobežotu lietotāju resursu skaitu.

Oficiālais skaidrojums ierobežo pavedienu skaitu, kas vienlaikus var piekļūt resursam vai resursu baseinam. Nosaukumvieta ir System.Threading

6. Pasākumi

Izmanto, lai paziņotu pavedienam, ka ir notikuši daži notikumi, sākot nākamā uzdevuma sākumu.

Oficiālajā skaidrojumā teikts, ka pavedienu sinhronizācijas notikumi tiek automātiski atiestatīti, kad signāls tiek saņemts pēc pavediena izlaišanas. Šādus veidus nevar mantot.

7. Savstarpēja izslēgšana

C# ir Mutex klase, tieši zem System.Threading nosaukumtelpas, Mutex faktiski ir mutex, kas var ne tikai risināt resursu konkurenci starp vairākiem pavedieniem, bet arī apstrādāt resursu konkurenci starp procesiem.


Veiktspējas pārbaudes kods

Koda palaišana

Veiktspējas testa rezultāti



Piezīme: Iepriekš minētie dati ir tikai pašreizējās testa vides aparatūras veiktspējas rezultāts, un tos var salīdzināt tikai savā starpā.

1) Dažādos testos tas noteikti ir ātrākais, lai nebloķētu, tāpēc mēģiniet izvairīties no resursu konkurences, kas noved pie bloķētas darbības.

2) Interlocked.CompareExchange konsekventi uzrāda izcilu veiktspēju multi-threading, ierindojoties otrajā vietā.

3) Trešā slēdzene, kritiskā zona, arī uzrāda labu veiktspēju, tāpēc, lūdzu, atspēkojiet citus, kad viņi saka, ka slēdzenes veiktspēja ir zema.

4) Ceturtā vieta ir atomu mainīgā (atomu) darbība, bet šobrīd tā atbalsta tikai mainīgo lielumu pašpalielināšanos un atņemšanu, un piemērojamība nav spēcīga.

5) Arī piektās lasīšanas / rakstīšanas slēdzenes (ReaderWriterLockSlim) veiktspēja ir laba, un tā neatbalsta neko nelasīšanu, un praktiskums joprojām ir salīdzinoši labs.

6) Pārējiem semaforiem, notikumiem un muteksiem ir vissliktākais sniegums, protams, tiem ir sava piemērošanas joma, bet tie nedarbojas labi, risinot resursu konkurenci.

Oriģinālās saites adrese:Hipersaites pieteikšanās ir redzama.





Iepriekšējo:ASP.NET Core (16) Atkarīgs no dinamiskās reģistrācijas pakalpojumu ievadīšanas
Nākamo:Mīkstais maršruts OpenWrt tiek uzsākts, izmantojot USB zibatmiņu
 Saimnieks| Publicēts 2023-4-13 18:46:52 |
C# programmas ļauj tikai vienai instancei palaist pareizo kodu
https://www.itsvse.com/thread-3391-1-1.html

Atšķirība starp ManualResetEvent un AutoResetEvent, ko apgūst C# pavedieni
https://www.itsvse.com/thread-4810-1-1.html

[Faktiskā cīņa]. NET/C# izmanto SemaphoreSlim, lai ierobežotu vienlaicīgas izpildes metodes
https://www.itsvse.com/thread-10259-1-1.html

C# lasīšanas/rakstīšanas bloķēšana LasītājsWriterLockSlim lietošana
https://www.itsvse.com/thread-3545-1-1.html

.net/c# Lietotāja daudzpavedienu vienlaicīga bloķēšana (virkne){...} Detalizēts skaidrojums
https://www.itsvse.com/thread-7764-1-1.html
Publicēts 2023-4-13 19:21:44 |
Uzziniet nedaudz...
Publicēts 2023-5-16 20:03:52 |
Uzziniet nedaudz...
Publicēts 2023-5-19 11:41:25 |
Iemācieties mācīties
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com