Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 4864|Odgovoriti: 4

[Vir] 【Turn】C# večnitna sočasnost pod različnimi ključavnicami

[Kopiraj povezavo]
Objavljeno 13. 4. 2023 ob 18:44:49 | | | |
V običajnih okoliščinah, dokler je vključeno večnitno programiranje, se kompleksnost programa znatno poveča, zmogljivost se znatno zmanjša, verjetnost napak pa se močno poveča.

Večnitno programiranje je namenjeno paralelnemu izvajanju programa za izboljšanje zmogljivosti obdelave podatkov, vendar v večini primerov vključuje tekmovanje za skupne vire, zato ga je treba zakleniti pri spreminjanju objektov virov. Vendar obstaja veliko načinov za implementacijo zaklepov, zato si poglejmo implementacijo in zmogljivost več vrst zaklepov v C#.

Več načinov uporabe ključavnic

1. Atomska ključavnica

Doseči tekmovanje "brez zaklepanja" preko atomske operacije Interlocked.CompareExchange.

Uradna razlaga je zagotoviti atomske operacije za spremenljivke, ki jih deli več niti. Imenski prostor: System.Threading

2. Kritično območje

Serializacija več niti za dostop do javnih virov ali kode je hitra in primerna za nadzor dostopa do podatkov. Zaklepna sintaksa v C# je sintaktični sladkor za kritično območje (Monitor).

3. Atomsko delovanje

Atomske operacije, ki so poseben primer, so po naravi niti varne, zato jih ni treba zaklepati.

Uradno se razlaga kot povečanje vrednosti določene spremenljivke v obliki atomske operacije in shranjevanje rezultata. Imenski prostor: System.Threading

4. Zaklep za branje in pisanje

Zaklepi za branje in pisanje omogočajo branje virov, ko drugi programi pišejo, zato je to bolj primerno, če vir dovoljuje umazane branja.

Uradna razlaga navaja zaklenjeno stanje, ki se uporablja za upravljanje dostopa do virov, kar omogoča večnitno branje ali ekskluzivni dostop do pisanja. Imenski prostor je System.Threading

5. Semafor

Semaforji, zasnovani za nadzor omejenega števila uporabniških virov.

Uradna razlaga omejuje število niti, ki lahko hkrati dostopajo do vira ali bazena virov. Imenski prostor je System.Threading

6. Dogodki

Uporablja se za obveščanje niti, da so se zgodili nekateri dogodki, s čimer se začne nasledstvena naloga.

Uradna razlaga navaja, da se dogodki sinhronizacije niti samodejno ponastavijo, ko je signal sprejet po sprostitvi niti. Takšnih vrst ni mogoče dedovati.

7. Medsebojna izključitev

V C# obstaja razred Mutex, tik pod imenskim prostorom System.Threading, Mutex je pravzaprav mutex, ki ne more le reševati konkurenco virov med več nitmi, ampak tudi konkurenco virov med procesi.


Koda za testiranje zmogljivosti

Zaženi kodo

Rezultati testiranja zmogljivosti



Opomba: Zgornji podatki so le rezultat strojne zmogljivosti trenutnega testnega okolja in jih je mogoče primerjati le med seboj.

1) V različnih testih je zagotovo najhitrejša možnost, da se ne zaklene, zato se izogibajte tekmovanju virov, ki vodi v zaklenjeno delovanje.

2) Prepleteno.CompareExchange dosledno kaže boljše rezultate v večnitnem delovanju in je na drugem mestu.

3) Tretja ključavnica, kritična cona, prav tako kaže dobro zmogljivost, zato prosim zavrnite druge, ko pravijo, da je zaklep nizek.

4) Četrto mesto je delovanje atomske spremenljivke (atomske), vendar trenutno podpira le samopovečevanje in odštevanje spremenljivk, pri čemer uporabnost ni močna.

5) Uspešnost petega zaklepa za branje/pisanje (ReaderWriterLockSlim) je prav tako v redu, podpira branje ničesar, praktičnost pa je še vedno razmeroma dobra.

6) Preostali semaforji, dogodki in mutex imajo seveda najslabšo učinkovitost, imajo svoje področje uporabe, vendar se ne obnesejo dobro pri konkurenci za vire.

Izvirni naslov povezave:Prijava do hiperpovezave je vidna.





Prejšnji:ASP.NET Jedro (16) Odvisno od vbrizgavanja storitev dinamične registracije
Naslednji:Mehka pot OpenWrt se začne teči preko USB ključka
 Najemodajalec| Objavljeno 13. 4. 2023 ob 18:46:52 |
C# programi dovoljujejo le enemu primeru, da zažene pravilno kodo
https://www.itsvse.com/thread-3391-1-1.html

Razlika med ManualResetEvent in AutoResetEvent, ki jo naučijo C# niti
https://www.itsvse.com/thread-4810-1-1.html

[Dejanski boj]. NET/C# uporablja SemaphoreSlim za omejevanje sočasnih metod izvajanja
https://www.itsvse.com/thread-10259-1-1.html

C# Branje/pisanje Lock ReaderWriterUporaba LockSlim
https://www.itsvse.com/thread-3545-1-1.html

.net/c# Uporabniški večnitni zaklep sočasnosti (string){...} Podrobna razlaga
https://www.itsvse.com/thread-7764-1-1.html
Objavljeno 13. 4. 2023 ob 19:21:44 |
Nauči se malo...
Objavljeno 2023-5-16 20:03:52 |
Nauči se malo...
Objavljeno 19. 5. 2023 ob 11:41:25 |
Uči se učiti
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com