Vaatimukset: Koska laitteiston resurssit ovat rajalliset, ohjelman täytyy kuluttaa tietty määrä laitteistoresursseja; korkean samanaikaisuuden tapauksessa, jos jotkut ohjelman resurssit kuluttavat menetelmät eivät ole rajoitettuja (viemällä suuri määrä dataa Excel-taulukkoon), se voi vaikuttaa koko ohjelman kyvyttömyyteen tarjota normaaleja palveluita ja myös käyttöjärjestelmän normaalia toimintaa.
Semafori ja semaforiSlim ero
SemaphoreSlim ja Semaphore ovat toiminnallisuudeltaan samankaltaisia. SemaphoreSlim on noin neljä kertaa nopeampi kuin Semaphore, mutta SemaphoreSlimiä ei voi käyttää prosessien väliseen signalointiin.
Suorituskyvyn parannuksen syynä on se, että SemaphoreSlim-luokka tarjoaa kevyen vaihtoehdon Semaphore-luokalle, joka ei käytä Windows-ytimen semaforia. Käytännössä, jos sinun ei tarvitse nimetä semaforeja, käytä SemaphoreSlim-luokkaa.
SemaphoreSlim perustuu SpinWaitiin ja Monitoriin, joten säie, joka odottaa lukituksen saamista, kuluttaa prosessorin syklejä toivoen saavansa lukon ennen kuin antaa tilaa uudelle säikeelle. Jos näin ei tapahdu, säie antaa järjestelmän vaihtaa kontekstia ja yrittää uudelleen, kun käyttöjärjestelmä aikatauluttaa säikeen uudelleen (kuluttamalla prosessorin syklejä). Jos odotus on pitkä, tämä tila voi viedä paljon prosessorin syklejä. Paras tapaus tälle toteutukselle on, että useimmiten ei ole odotusaikaa ja lukitus saadaan lähes heti. Semafori perustuu käyttöjärjestelmän ytimen toteutuksiin, joten joka kerta kun lukko hankitaan, se vie melko paljon prosessorin syklejä, mutta sen jälkeen säie vain horrostetaan saadakseen lukon saamiseen tarvittavan ajan.
Semaforidokumentaatio:https://docs.microsoft.com/en-us ... aphore?view=net-6.0 SemaphoreSlim -dokumentaatio:https://docs.microsoft.com/en-us ... reslim?view=net-6.0
Ennen menetelmän suorittamista yleisesti käytetyt odotusmenetelmät ovat seuraavatSoita oman yrityksesi todellisen tilanteen mukaan!
Wait(): Estää säikeen, kunnes se pääsee SemaphoreSlim-kanavaan. Wait(0): Menetelmää ei estetä. Se testaa odotuskahvan tilan ja palaa välittömästi. Odota: Estää nykyisen säikeen, kunnes se pääsee SemaphoreSlimiin, samalla määrittäen aikakatkaisun 32-bittisen allekirjoitetun kokonaisluvun avulla.
Lähdekoodi on seuraava:
Renderöinnit ovat seuraavat:
|