Čo je zámok pamäte?

Historicky boli všetky počítačové programy napísané úplne sekvenčným spôsobom. Toto je jednoduché na čítanie, písanie a pochopenie. Je to tiež jednoduché pre počítač a vyžaduje relatívne jednoduchý hardvér. S touto dizajnovou paradigmou sú jedinými dvoma spôsobmi zvýšenia výkonu systému písanie efektívnejšieho kódu a zvýšenie rýchlosti CPU. Je možné zvýšiť efektivitu kódu, ale vo všeobecnosti ide o zložitý proces s často obmedzenými výsledkami.

Po desaťročia sa výkon mohol znižovať čakaním na nové, efektívnejšie CPU. Ako popisuje Moorov zákon, výkon CPU sa zhruba zdvojnásobí každé dva až tri roky. Bohužiaľ, väčšina z týchto nárastov výkonu pochádza z používania stále menších výrobných uzlov. Moderná technológia sa snaží zmenšiť veľkosť uzla historickým tempom vďaka materiálnym ťažkostiam pracujúcim v rozsahu nanometrov.

Aby sa to obišlo, moderní architekti CPU sa rozhodli pridať do CPU viacero procesorových jadier. Každé jadro procesora môže konať nezávisle na inej úlohe. Aj keď nedokážu spojiť rovnaký problém, môžu pracovať na dvoch problémoch súčasne. Táto základná architektonická zmena poskytuje veľa výkonu navyše, ale neprináša priamy úžitok jednotlivým procesom, aj keď znižuje spory o čas procesora.

Ak chcete využiť výhody viacjadrových CPU, kód musí byť napísaný viacvláknovým spôsobom. Každé vlákno môže byť spustené súbežne, čím sa výkon zvýši podľa počtu dostupných vlákien a jadier CPU. Ak to však urobíte, naráža na novú výzvu, „podmienku pretekov“.

Poznámka: Niektoré úlohy nemôžu byť viacvláknové, zatiaľ čo iné môžu byť masívne viacvláknové. Možné výkonnostné výhody závisia od vykonanej práce.

Podmienky pretekov

Viacvláknový softvér môže využívať výhody viacerých jadier. V týchto vodách číhajú nebezpečenstvá, pripravené uväzniť neskúseného programátora. Spor môže nastať, keď dve rôzne vlákna interagujú s rovnakým bitom pamäte.

Jednoduchým príkladom môžu byť dve vlákna, ktoré sa pokúšajú kontrolovať a inkrementovať premennú súčasne. Povedzme, že a=0 . Dve rôzne vlákna potom vykonávajú svoje funkcie a v určitom bode skontrolujú a a zvýšia ho o jedno. Vo všeobecnosti by ste očakávali, že výsledok dvoch vlákien pridaných jedna k nule bude dva. Väčšinou by to tak malo byť. Môžete získať iný výsledok, ak obe vlákna prejdú touto špecifickou funkciou presne v správnom čase.

V tomto prípade prvé vlákno číta hodnotu a . Predtým, ako prvé vlákno môže zvýšiť hodnotu hoci , prečíta ho druhé vlákno. Teraz prvé vlákno pridáva jedna k nule, ale druhé vlákno už verí, že hodnota je nula, a pridáva jedna k nule. Výsledkom je, že konečná hodnota a je 1, nie 2.

Preteky podľa scenára najhoršieho prípadu

Hoci vyššie uvedený príklad nemusí znieť obzvlášť zle, môže mať dramatické účinky. Čo ak hodnota a vyberá režim prevádzky stroja? Čo ak môžu byť špecifické prevádzkové režimy tohto stroja nebezpečné alebo dokonca život ohrozujúce?

Podmienky pretekov tiež nemusia byť také jednoduché. Napríklad môže byť možné, aby jedno vlákno čítalo časť pamäte v rovnakom čase, keď do nej zapisuje iné vlákno. V takom prípade môže vlákno na čítanie získať zvláštnu kombináciu údajov pred a po. Povedzme, že kontrola je jednoduchá kontrola pravda/nepravda.

Ak premenná na začiatku čítania uviedla true, ale práve prebiehala prepisovanie na slovo false, výsledkom operácie čítania môže byť niečo ako „trlse“. Toto nie je „pravda“ ani „nepravda“. Neexistencia ani jednej z dvoch možností v binárnom výbere by takmer určite viedla k zlyhaniu aplikácie. Toto poškodenie pamäte môže viesť k mnohým bezpečnostným problémom, ako je odmietnutie služby a eskalácia privilégií.

Uzamknutie závodu

Vedieť, aké bity pamäte v programe sú zdieľané medzi rôznymi vláknami, je nevyhnutné na zabránenie konfliktu. Nie je potrebné nič robiť, ak je premenná riadená a prístupná iba jedným vláknom. Ak dve alebo viaceré vlákna môžu pristupovať k premennej, musíte zabezpečiť, aby sa všetky operácie na tejto časti pamäte dokončili nezávisle od seba.

Táto nezávislosť je dosiahnutá vďaka zámku. V kóde programu musíte pri písaní funkcie, ktorá funguje na zdieľanej časti pamäte, vložiť zámok. Tento zámok blokuje prístup iných vlákien k tejto časti pamäte, kým sa zámok neuvoľní.

Zámok nie je najelegantnejším riešením. Jednak má réžiu pamäte. Môže tiež prinútiť vlákno visieť a čakať na uvoľnenie zámku. V závislosti od situácie sa zámok nemusí uvoľniť veľmi dlho alebo sa nemusí uvoľniť vôbec. V najhoršom prípade môže odomknutie zámku závisieť od toho, že sa niečo stane v inom zablokovanom vlákne, čo vedie k zablokovaniu.

Je nevyhnutné optimalizovať používanie zámkov. Môžete ovládať, ako zrnitý je zámok. Ak napríklad upravujete údaje v tabuľke, môžete uzamknúť celú tabuľku alebo uzamknúť iba upravený riadok. Uzamknutie celej tabuľky by znamenalo uzamknutie hrubej zrnitosti. Minimalizuje réžiu z implementácie príliš veľkého počtu zámkov, ale zvyšuje šancu, že zámok zablokuje ďalšie vlákno. Uzamknutie iba riadku by bolo jemným zámkom zrnitosti. Je oveľa menej pravdepodobné, že to bude zasahovať do iných vlákien, ale znamená to, že budú potrebné roztrhané zámky, čím sa zvýši celková réžia.

Záver

Zámok pamäte je kódový nástroj, ktorý sa používa na zabezpečenie atomických operácií v pamäti vo viacvláknovom prostredí. Uzamknutím časti pamäte pred operáciou si môžete byť istí, že sa nemôže vyskytnúť žiadne neočakávané správanie z dôvodu sporu. Zámky pamäte sa dodávajú s réžiou pamäte, ale môžu tiež spôsobiť zablokovanie.

Blokovanie je miesto, kde sa iné vlákno pokúša pracovať na uzamknutom pemory. Niť tam sedí, zablokovaná, kým sa zámok neuvoľní. To môže spôsobiť problémy, ak uvoľnenie zámku vyžaduje, aby niečo urobilo iné vlákno, pretože sa môže zablokovať skôr, ako dokončí predpoklad na uvoľnenie zámku, ktorý ho blokuje. Zámkom pamäte sa dá vyhnúť písaním neblokovacích kódov. To však môže byť zložité a menej výkonné ako používanie zámkov. Nezabudnite zanechať svoje komentáre nižšie.


Leave a Comment

Základy 3D tlače: Nevyhnutný kontrolný zoznam údržby

Základy 3D tlače: Nevyhnutný kontrolný zoznam údržby

Udržiavanie vašich zariadení v dobrom stave je nevyhnutné. Tu sú niektoré užitočné tipy, ako váš 3D tlačiar udržiavať v top stave.

Ako nainštalovať SSD na desktopových a prenosných počítačoch

Ako nainštalovať SSD na desktopových a prenosných počítačoch

Kúpili ste si SSD s nádejou na upgrade interného úložiska vášho počítača, ale neviete, ako nainštalovať SSD? Prečítajte si tento článok teraz!

Ako nájsť IP adresu tlačiarne

Ako nájsť IP adresu tlačiarne

Máte problém nájsť IP adresu, ktorú vaša tlačiareň používa? Ukážeme vám, ako ju nájsť.

Ako pripojiť notebook s Windows 11 k projektoru/TV

Ako pripojiť notebook s Windows 11 k projektoru/TV

Prečítajte si tento článok a dozviete sa jednoduchý, krok za krokom popísaný proces pripojenia notebooku k projektoru alebo TV na operačných systémoch Windows 11 a Windows 10.

5 Dôvodov, Prečo Sa Váš Notebook Prehrieva

5 Dôvodov, Prečo Sa Váš Notebook Prehrieva

Zistite niektoré možné dôvody, prečo sa váš notebook prehrieva, spolu s tipmi a trikmi, ako sa vyhnúť tomuto problému a udržať vaše zariadenie chladné.

Základy 3D tlače: Tipy na údržbu vašej 3D tlačiarne

Základy 3D tlače: Tipy na údržbu vašej 3D tlačiarne

Údržba vašich 3D tlačiarní je veľmi dôležitá na dosiahnutie najlepších výsledkov. Tu sú niektoré dôležité tipy, na ktoré by ste mali myslieť.

10 Najlepších NAS úložných zariadení pre domáce a profesionálne použitie

10 Najlepších NAS úložných zariadení pre domáce a profesionálne použitie

Či už hľadáte NAS pre svoj domov alebo kanceláriu, pozrite si tento zoznam najlepších NAS úložných zariadení.

Čo je to Haptická spätná väzba?

Čo je to Haptická spätná väzba?

Haptická spätná väzba je typ dotykovej komunikácie – zvyčajne vo forme vibračného vzoru. Zistite, čo je Haptická spätná väzba vo svete mobilných technológií a hier.

Čo je alokačná jednotka?

Čo je alokačná jednotka?

Prideľovacia jednotka je súčasťou systému formátovania súborov. Tu sú dôležité informácie a optimalizačné tipy k tejto téme.

Ako nájsť MAC adresu na tlačiarni

Ako nájsť MAC adresu na tlačiarni

Ukážeme vám tri spôsoby, ako nájsť MAC adresu tlačiarne Canon Pixma MG5200.