See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 14970|Vastuse: 3

[Allikas] [Päris lahing]. NET/C# kasutab SemaphoreSlim'i samaaegsete täitmismeetodite piiramiseks

[Kopeeri link]
Postitatud 19.02.2022 21:23:20 | | | |
Nõuded: Riistvara piiratud ressursside tõttu peab programm tarbima teatud hulga riistvaralisi ressursse; kõrge samaaegsuse korral, kui mõned programmi liiga palju ressursse tarbivad meetodid ei ole piiratud (näiteks suure andmehulga eksportimine Exceli tabelisse), võib see mõjutada kogu programmi võimetust pakkuda normaalseid teenuseid ning mõjutada ka operatsioonisüsteemi normaalset tööd.

Semafor ja SemaforSlim erinevus

SemaphoreSlim ja Semaphore on funktsionaalsuse poolest sarnased. SemaphoreSlim on umbes 4 korda kiirem kui Semaphore, kuid SemaphoreSlim'i ei saa kasutada protsessidevaheliseks signalisatsiooniks.

Jõudluse paranemise põhjuseks on see, et SemaphoreSlim klass pakub kerget alternatiivi Semaphore'i klassile, mis ei kasuta Windowsi kerneli semafori. Põhimõtteliselt, kui sul pole vaja semafore nimetada, kasuta SemaphoreSlim klassi.

SemaphoreSlim põhineb SpinWaitil ja Monitoril, nii et lõim, mis ootab lukustust, kulutab protsessori tsükleid, lootes lukku omandada enne, kui see annab teed teisele lõimele. Kui seda ei juhtu, siis võimaldab lõim süsteemil konteksti vahetada ja uuesti proovida, kui operatsioonisüsteem selle lõime uuesti ajastab (kasutades mõningaid protsessoritsükleid). Kui ooteaeg on pikk, võib see režiim võtta palju protsessori tsükleid. Seega on selle rakenduse parim juhtum see, et enamasti pole ooteaega ja lukustus saab peaaegu kohe.
Semafor tugineb operatsioonisüsteemi tuuma rakendustele, nii et iga kord, kui lukk hangitakse, võtab see üsna palju protsessori tsükleid, kuid pärast seda lülitub lõim lihtsalt talveunne, et saada lukustamiseks kuluv aeg.

Semafori dokumentatsioon:https://docs.microsoft.com/en-us ... aphore?view=net-6.0
SemaphoreSlim dokumentatsioon:https://docs.microsoft.com/en-us ... reslim?view=net-6.0

Enne meetodi käivitamist on tavaliselt kasutatavad ootemeetodid järgmisedHelista vastavalt oma ettevõtte tegelikule olukorrale

Wait(): Blokeerib lõime, kuni see saab siseneda SemaphoreSlim-i.
Oota(0): Meetodit ei blokeerita. See testib ootekäepideme seisukorda ja tagastab kohe.
Oota: blokeerib praeguse lõime, kuni see saab siseneda SemaphoreSlim'i, määrates samal ajal ajapiirangu 32-bitise allkirjastatud täisarvuga.

Lähtekood on järgmine:

Renderdused on järgmised:







Eelmine:Linux Secretless Login (ssh) või Secretless Copy (scp) failid teistele serveritele
Järgmine:Linux kasutab lookbusy protsessori kasutuse simuleerimiseks
Postitatud 19.02.2022 23:16:57 |
Õpi õppima...
Postitatud 20.02.2022 22:19:24 |
katse
 Üürileandja| Postitatud 18.12.2024 20:40:10 |
ManualResetEventi ja AutoResetEventi, mida õpivad C# lõimed
https://www.itsvse.com/thread-4810-1-1.html
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com