Mis on mälulukk?

Ajalooliselt on kõik arvutiprogrammid kirjutatud täiesti järjestikku. Seda on lihtne lugeda, kirjutada ja mõista. Seda on ka arvuti jaoks lihtne käivitada ja see nõuab suhteliselt lihtsat riistvara. Selle disainiparadigma puhul on süsteemi jõudluse suurendamiseks ainult kaks võimalust tõhusama koodi kirjutamine ja protsessori kiiruse suurendamine. Koodi tõhususe suurendamine võib olla võimalik, kuid see on üldiselt keeruline protsess, mille tulemused on sageli piiratud.

Aastakümneid võib jõudlust vähendada, kui oodatakse uusi tõhusamaid protsessoreid. Nagu Moore'i seadus kirjeldab, kahekordistuvad protsessorite jõudlus umbes iga kahe kuni kolme aasta järel. Kahjuks tulenes enamik neist jõudluse kasvust üha väiksemate tootmissõlmede kasutamisest. Kaasaegne tehnoloogia on näinud vaeva, et vähendada sõlme suurust ajaloolise kiirusega tänu materiaalsetele raskustele nanomeetrite skaalal töötades.

Sellest ülesaamiseks on kaasaegsed CPU-arhitektid otsustanud lisada protsessoritele mitu protsessorituuma. Iga protsessori tuum võib erineva ülesandega iseseisvalt tegutseda. Kuigi nad ei saa sama probleemi kombineerida, saavad nad töötada kahe probleemiga samaaegselt. See põhimõtteline arhitektuuriline muudatus annab palju lisajõudlust, kuid see ei too konkreetsetele protsessidele otsest kasu, kuigi vähendab protsessori aja pärast vaidlusi.

Mitmetuumaliste protsessorite eeliste kasutamiseks tuleb kood kirjutada mitme lõimega viisil. Seejärel saab iga lõime samaaegselt käivitada, skaleerides jõudluse kasu saadaolevate lõimede ja protsessori tuumade arvu järgi. Seda tehes satub aga uus väljakutse, „rassiseisund”.

Märkus. Mõned ülesanded ei saa olla mitmelõimelised, samas kui teised võivad olla tohutult mitmelõimelised. Võimalik tulemuslikkuse kasu sõltub tehtud tööst.

Võistlustingimused

Mitme keermega tarkvara võib ära kasutada mitut tuuma. Ohud varitsevad neid vetes, olles valmis kogenematu programmeerija lõksu püüdma. Võistlusseisund võib tekkida siis, kui kaks erinevat lõime suhtlevad sama mälubitiga.

Lihtne näide võib olla kaks lõime, mis üritavad muutujat samaaegselt kontrollida ja suurendada. Oletame, et a=0 . Kaks erinevat lõime täidavad seejärel oma ülesandeid ja mingil hetkel kontrollivad a ja suurendavad seda ühe võrra. Üldiselt eeldate, et kahe lõime lisamisel ühe nullile on tulemuseks kaks. Enamasti peaks see nii olema. Kui mõlemad lõimed läbivad selle konkreetse funktsiooni täpselt õigel ajal, võite saada erineva tulemuse.

Sel juhul loeb esimene lõime a väärtuse . Enne kui esimene lõim saab küll väärtust suurendada , loeb teine ​​lõim selle. Nüüd lisab esimene lõim ühe nullile, kuid teine ​​​​lõng juba usub, et väärtus on null, lisades ühe nullile. Selle tulemuseks on, et a lõppväärtus on 1, mitte 2.

Võidusõit halvima stsenaariumi poole

Kuigi ülaltoodud näide ei pruugi kõlada eriti halvasti, võib sellel olla dramaatiline mõju. Mis siis, kui a väärtus valib masina töörežiimi? Mis siis, kui selle masina teatud töörežiimid võivad olla ohtlikud või isegi eluohtlikud?

Ka võistlustingimused ei pea nii lihtsad olema. Näiteks võib olla võimalik, et üks lõim loeb mäluosa samal ajal, kui teine ​​lõim sellele kirjutab. Sel juhul võib lugemislõng saada kummalise segu nii enne kui ka pärast saadud andmetest. Oletame, et kontroll on lihtne õige/vale kontroll.

Kui muutuja ütles lugemise alguses tõene, kuid seda kirjutati üle sõnale false, võib lugemistoimingu tulemus olla midagi sellist nagu "trlse". See ei ole "tõene" ega "vale". Kui binaarses valikus pole kumbagi kahest valikust, põhjustab see peaaegu kindlasti rakenduse kokkuvarisemise. See mälu rikkumine võib põhjustada paljusid turvaprobleeme, nagu teenuse keelamine ja privileegide eskalatsioon.

Võistluse lukustamine

Võistlusseisundi vältimiseks on oluline teada, milliseid mälubitte programmis jagatakse erinevate lõimede vahel. Midagi pole vaja teha, kui muutujat kontrollib ja sellele pääseb juurde ainult üks lõime. Kui muutujale pääseb juurde kaks või enam lõime, peate tagama, et kõik toimingud selle mälutükiga viiakse lõpule üksteisest sõltumatult.

See iseseisvus saavutatakse tänu lukule. Programmi koodis peate panema lukku, kui kirjutate funktsiooni, mis töötab jagatud mälul. See lukk blokeerib teiste lõimede juurdepääsu sellele mälule, kuni lukk vabastatakse.

Lukk ei ole kõige elegantsem lahendus. Esiteks on sellel mälu ülekoormus. Samuti võib see sundida niidi rippuma, oodates luku vabastamist. Olenevalt olukorrast ei pruugi lukk vabaneda väga pikka aega või üldse mitte. Halvima stsenaariumi korral võib luku avamine sõltuda sellest, et teises blokeeritud lõimes toimub midagi, mis viib ummikseisu.

Oluline on optimeerida lukkude kasutamist. Saate juhtida, kui teraline lukk on. Näiteks kui muudate andmeid tabelis, võite lukustada kogu tabeli või lukustada ainult redigeeritud rea. Kogu laua lukustamine oleks jämedateralisuse lukk. See minimeerib liiga paljude lukkude rakendamisega kaasnevaid üldkulusid, kuid suurendab võimalust, et lukk blokeerib teise lõime. Ainult rea lukustamine oleks peene täpsusega lukk. See häirib palju vähem teisi niite, kuid see tähendab, et vaja on rebitud lukke, mis suurendavad kogu üldkulusid.

Järeldus

Mälulukk on kooditööriist, mida kasutatakse mälus aatomite toimingute tagamiseks mitmelõimelises keskkonnas. Kui lukustate mälutüki enne sellega töötamist, võite olla kindel, et võistlustingimuste tõttu ei saa tekkida ootamatut käitumist. Mälulukud on varustatud mäluga, kuid võivad põhjustada ka blokeerimist.

Blokeerimine on koht, kus mõni teine ​​lõim üritab lukustatud pemoryt kasutada. Niit istub seal, blokeeritud, kuni lukk vabastatakse. See võib põhjustada probleeme, kui luku vabastamiseks on millegi tegemiseks vaja teist lõime, kuna see võib blokeeruda enne, kui see saab täita seda blokeeriva luku vabastamise eeltingimuse. Mälu lukke saab vältida mitteblokeerivate koodide kirjutamisega. See võib aga olla keeruline ja vähem tõhus kui lukkude kasutamine. Ärge unustage allpool oma kommentaare jätta.


Mis on SMPS?

Mis on SMPS?

Enne oma arvutile SMPS-i valimist uurige, mis on SMPS ja mida tähendab erinevate tõhususe reiting.

Mis on isolatsioonipõhine turvalisus?

Mis on isolatsioonipõhine turvalisus?

Kavatsesin süveneda teemasse, mis muutub küberturvalisuse maailmas üha olulisemaks: isolatsioonipõhine turvalisus. See lähenemine

Kuidas kasutada automaatset klikkerit Chromebooki jaoks

Kuidas kasutada automaatset klikkerit Chromebooki jaoks

Täna kavatsesime süveneda tööriista, mis suudab teie Chromebookis korduvaid klõpsamisi automatiseerida: automaatset klõpsurit. See tööriist võib säästa teie aega ja

Roomba peatub, jääb kinni ja pöörab ümber – paranda

Roomba peatub, jääb kinni ja pöörab ümber – paranda

Lahendage probleem, kus teie Roomba robottolmuimeja peatub, kinni jääb ja pöörleb pidevalt ümber.

Miks minu Chromebook ei lülitu sisse?

Miks minu Chromebook ei lülitu sisse?

Hankige vastused küsimusele, miks minu Chromebook ei lülitu sisse? Selles kasulikus juhendis Chromebooki kasutajatele.

Kuidas muuta Steam Decki graafikaseadeid

Kuidas muuta Steam Decki graafikaseadeid

Steam Deck pakub jõulist ja mitmekülgset mängukogemust otse teie käeulatuses. Kuid selleks, et optimeerida oma mängimist ja tagada parim võimalik

Kuidas muuta Fitbit Versa 4 kella numbrit

Kuidas muuta Fitbit Versa 4 kella numbrit

Muutke oma Fitbit Versa 4 kella sihverplaati, et anda oma kellale iga päev tasuta uus välimus. Vaadake, kui kiire ja lihtne see on.

Kuidas Googleile andmepüügipettustest teatada

Kuidas Googleile andmepüügipettustest teatada

Sellest juhendist leiate teavet selle kohta, kuidas petturist Google'ile teatada, et vältida teiste petmist.

Kuidas eemaldada GPU Windowsi arvutist 2023. aastal

Kuidas eemaldada GPU Windowsi arvutist 2023. aastal

Kas peate GPU arvutist eemaldama? Liituge minuga ja selgitan selles samm-sammulises juhendis, kuidas GPU arvutist eemaldada.

Mis on õlasurf?

Mis on õlasurf?

Õlas surfamine on sotsiaalse manipuleerimise rünnak. See hõlmab ründajat, kes kogub teavet teie ekraani vaadates.