Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 14970|Atsakyti: 3

[Šaltinis] [Tikroji kova]. NET/C# naudoja SemaphoreSlim, kad apribotų lygiagrečius vykdymo metodus

[Kopijuoti nuorodą]
Paskelbta 2022-02-19 21:23:20 | | | |
Reikalavimai: Dėl ribotų aparatinės įrangos išteklių programa turi sunaudoti tam tikrą kiekį aparatinės įrangos išteklių, esant dideliam sutapimui, jei kai kurie metodai, kurie sunaudoja per daug programos išteklių, nėra ribojami (eksportuojant didelį duomenų kiekį į "Excel" lentelę), tai gali turėti įtakos visos programos nesugebėjimui teikti įprastų paslaugų, taip pat turėti įtakos normaliam operacinės sistemos veikimui.

Semaforas ir SemaphoreSlim skirtumas

"SemaphoreSlim" ir "Semaphore" yra panašūs savo funkcionalumu. SemaphoreSlim yra maždaug 4 kartus greitesnis nei Semaphore, tačiau SemaphoreSlim negali būti naudojamas signalizacijai tarp procesų.

Našumo pagerėjimo priežastis yra ta, kad "SemaphoreSlim" klasė yra lengva alternatyva "Semaphore" klasei, kuri nenaudoja "Windows" branduolio semaforo. Iš esmės, jei jums nereikia pavadinti semaforų, naudokite SemaphoreSlim klasę.

"SemaphoreSlim" yra pagrįstas "SpinWait" ir "Monitor", todėl gija, laukianti, kol gaus užraktą, sunaudoja procesoriaus ciklų laikotarpį, tikėdamasi įsigyti užraktą prieš užleisdama vietą kitai gijai. Jei taip neatsitiks, gija leidžia sistemai perjungti kontekstą ir bandyti dar kartą, kai OS vėl suplanuoja tą giją (sunaudodama kai kuriuos procesoriaus ciklus). Jei laukimas ilgas, šis režimas gali sunaudoti daug procesoriaus ciklų. Taigi geriausias šio įgyvendinimo atvejis yra tas, kad dažniausiai nėra laukimo laiko ir užraktą galite gauti beveik iš karto.
Semaphore remiasi OS branduolio įgyvendinimais, todėl kiekvieną kartą, kai užraktas įsigyjamas, reikia nemažai procesoriaus ciklų, tačiau po to gija tiesiog užmigdo, kad gautų laiką, kurio reikia užraktui gauti.

Semaforų dokumentacija:https://docs.microsoft.com/en-us ... aphore?view=net-6.0
SemaphoreSlim dokumentacija:https://docs.microsoft.com/en-us ... reslim?view=net-6.0

Prieš vykdant metodą, dažniausiai naudojami laukimo būdaiSkambinkite pagal faktinę savo verslo situaciją

Wait(): blokuoja giją, kol ji pateks į SemaphoreSlim.
Palaukite(0): metodas nebus užblokuotas. Jis patikrins laukimo rankenos būseną ir nedelsiant grįš.
Palaukite: blokuoja dabartinę giją, kol ji galės patekti į SemaphoreSlim, nurodydama skirtąjį laiką naudojant 32 bitų pasirašytą sveikąjį skaičių.

Šaltinio kodas yra toks:

Atvaizdai yra tokie:







Ankstesnis:"Linux Secretless Login" (ssh) arba "Secretless Copy" (scp) failus į kitus serverius
Kitą:"Linux" naudoja "lookus", kad imituotų procesoriaus naudojimą
Paskelbta 2022-02-19 23:16:57 |
Išmokite mokytis...
Paskelbta 2022-02-20 22:19:24 |
Bandymo
 Savininkas| Paskelbta 2024-12-18 20:40:10 |
Skirtumas tarp "ManualResetEvent" ir "AutoResetEvent", išmoktas iš C# gijų
https://www.itsvse.com/thread-4810-1-1.html
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com