Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 4864|Svare: 4

[Kilde] 【Turn】C# flertrådet samtidighet under ulike låser

[Kopier lenke]
Publisert 13.04.2023 kl. 18:44:49 | | | |
Under normale omstendigheter, så lenge multitrådet programmering er involvert, vil programmets kompleksitet øke betydelig, ytelsen vil synke betydelig, og sannsynligheten for feil vil øke betydelig.

Multitrådet programmering er ment å kjøre et program parallelt for å forbedre databehandlingsmulighetene, men i de fleste tilfeller innebærer det konkurranse om delte ressurser, så det må låses når ressursobjekter endres. Det finnes imidlertid mange måter å implementere låser på, så la oss se på implementeringen og ytelsen til flere typer låser i C#.

Flere måter å bruke låser på

1. Atomlås

Oppnå «låsløs» konkurranse gjennom atomoperasjonen Interlocked.CompareExchange.

Den offisielle forklaringen er å tilby atomære operasjoner for variabler som deles av flere tråder. Navnerom: System.Threading

2. Kritisk område

Serialisering av flere tråder for å få tilgang til offentlige ressurser eller et kodestykke er raskt og egnet for å kontrollere datatilgang. Låsesyntaksen i C# er et syntakssukker for det kritiske området (Monitor).

3. Atomoperasjon

Atomoperasjoner, som er et spesialtilfelle, er iboende trådsikre, så det er ikke nødvendig å låse dem.

Offisielt tolkes det som å øke verdien av en gitt variabel i form av en atomoperasjon og lagre resultatet. Navnerom: System.Threading

4. Les og skriv lås

Lese-skrive-låser gjør det mulig å lese ressurser når andre programmer skriver, så hvis ressursen tillater skitne lesninger, er dette mer passende.

Den offisielle forklaringen indikerer en låst tilstand som brukes til å administrere ressurstilgang, noe som muliggjør flertrådede lesinger eller eksklusiv skrivetilgang. Navnerommet er System.Threading

5. Semafor

Semaforer, designet for å kontrollere et begrenset antall brukerressurser.

Den offisielle forklaringen begrenser antall tråder som kan få tilgang til en ressurs eller ressurspool samtidig. Navnerommet er System.Threading

6. Arrangementer

Brukes til å varsle tråden om at noen hendelser har oppstått, og starte starten på en etterfølgeroppgave.

Den offisielle forklaringen sier at trådsynkroniseringshendelser automatisk tilbakestilles når et signal mottas etter at en tråd er sluppet. Slike typer kan ikke arves.

7. Gjensidig utelukkelse

Det finnes en Mutex-klasse i C#, rett under System.Threading-navnerommet, Mutex er faktisk en mutex, som ikke bare kan håndtere ressurskonkurranse mellom flere tråder, men også håndtere ressurskonkurranse mellom prosesser.


Ytelsestestkode

Kjør koden

Resultater fra ytelsestester



Merk: Ovenstående data er kun resultatet av maskinvareytelsen til det nåværende testmiljøet, og kan kun sammenlignes med hverandre.

1) I ulike tester er det definitivt raskest å ikke låse, så prøv å unngå ressurskonkurranse som fører til låst drift.

2) Interlocked.CompareExchange viser konsekvent overlegen ytelse i multitråding, og er nummer to.

3) Den tredje låsen, den kritiske sonen, viser også god ytelse, så vennligst motkreft andre når de sier at låsens ytelse er lav.

4) Den fjerde plassen er atomvariabel (atom) operasjon, men for øyeblikket støtter den kun selvøkning og subtraksjon av variabler, og anvendeligheten er ikke sterk.

5) Ytelsen til den femte lese-/skrivelåsen (ReaderWriterLockSlim) er også grei, og den støtter å ikke lese noe, og praktisk nytte er fortsatt relativt god.

6) De gjenværende semaforene, hendelsene og mutex har dårligst ytelse, selvfølgelig har de sitt eget bruksområde, men de presterer dårlig i forhold til ressurskonkurranse.

Opprinnelig lenkeadresse:Innloggingen med hyperkoblingen er synlig.





Foregående:ASP.NET Kjerne (16) Avhengig av tilførsel av dynamiske registreringstjenester
Neste:Soft route OpenWrt startes via en USB-pinne
 Vert| Publisert 13.04.2023 18:46:52 |
C#-programmer tillater bare én instans å kjøre riktig kode
https://www.itsvse.com/thread-3391-1-1.html

Forskjellen mellom ManualResetEvent og AutoResetEvent læres gjennom C#-tråder
https://www.itsvse.com/thread-4810-1-1.html

[Faktisk kamp]. NET/C# bruker SemaphoreSlim for å begrense samtidige utførelsesmetoder
https://www.itsvse.com/thread-10259-1-1.html

C# Read/Write Lock ReaderWriterLockSlim-bruk
https://www.itsvse.com/thread-3545-1-1.html

.net/c# Bruker multitrådet samtidighetslås(streng){...} Detaljert forklaring
https://www.itsvse.com/thread-7764-1-1.html
Publisert 13.04.2023 kl. 19:21:44 |
Lær litt...
Publisert 16.05.2023 20:03:52 |
Lær litt...
Publisert 19.05.2023 11:41:25 |
Lær å lære
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com