Č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.


Ako klonovať pevný disk

Ako klonovať pevný disk

V modernom digitálnom veku, kde sú údaje cenným aktívom, môže byť klonovanie pevného disku v systéme Windows pre mnohých zásadným procesom. Tento komplexný sprievodca

Ako opraviť načítanie ovládača WUDFRd v systéme Windows 10?

Ako opraviť načítanie ovládača WUDFRd v systéme Windows 10?

Zobrazuje sa vám pri zavádzaní počítača chybové hlásenie, ktoré hovorí, že sa nepodarilo načítať ovládač WUDFRd do vášho počítača?

Ako opraviť kód chyby NVIDIA GeForce Experience 0x0003

Ako opraviť kód chyby NVIDIA GeForce Experience 0x0003

Máte na pracovnej ploche skúsenosti s kódom chyby 0x0003 NVIDIA GeForce? Ak áno, prečítajte si blog a zistite, ako rýchlo a jednoducho opraviť túto chybu.

čo je SMPS?

čo je SMPS?

Pred výberom SMPS pre váš počítač si prečítajte, čo je SMPS a čo znamenajú rôzne hodnotenia účinnosti.

Prečo sa môj Chromebook nezapne

Prečo sa môj Chromebook nezapne

Získajte odpovede na otázku Prečo sa môj Chromebook nezapne? V tejto užitočnej príručke pre používateľov Chromebookov.

Ako nahlásiť phishing spoločnosti Google

Ako nahlásiť phishing spoločnosti Google

V tejto príručke sa dozviete, ako nahlásiť podvodníka spoločnosti Google, aby ste mu zabránili v podvádzaní iných.

Roomba sa zastaví, prilepí a otočí – oprava

Roomba sa zastaví, prilepí a otočí – oprava

Vyriešte problém, kedy sa váš robotický vysávač Roomba zastaví, zasekne a stále sa otáča.

Ako zmeniť nastavenia grafiky na Steam Deck

Ako zmeniť nastavenia grafiky na Steam Deck

Steam Deck ponúka robustný a všestranný herný zážitok priamo na dosah ruky. Aby ste však optimalizovali svoje hranie a zabezpečili to najlepšie možné

Čo je bezpečnosť založená na izolácii?

Čo je bezpečnosť založená na izolácii?

Chceli sme sa ponoriť do témy, ktorá sa vo svete kybernetickej bezpečnosti stáva čoraz dôležitejšou: bezpečnosť založená na izolácii. Tento prístup k

Ako používať Auto Clicker pre Chromebook

Ako používať Auto Clicker pre Chromebook

Dnes sme sa chceli ponoriť do nástroja, ktorý dokáže automatizovať úlohy opakovaného klikania na Chromebooku: Auto Clicker. Tento nástroj vám môže ušetriť čas a