Co je zámek paměti?

Historicky byly všechny počítačové programy napsány naprosto sekvenčním způsobem. To je snadné číst, psát a pochopit. Pro počítač je to také jednoduché a vyžaduje relativně jednoduchý hardware. S tímto návrhovým paradigmatem jsou jedinými dvěma způsoby, jak zvýšit výkon systému, psát efektivnější kód a zvýšit rychlost CPU. Zvýšení efektivity kódu je možné, ale obecně se jedná o složitý proces s často omezenými výsledky.

Po desetiletí se mohl výkon snižovat čekáním na nové, efektivnější CPU. Jak je popsáno v Moorově zákoně, výkon CPU se zhruba zdvojnásobí každé dva až tři roky. Bohužel většina těchto nárůstů výkonu pochází z používání stále menších výrobních uzlů. Moderní technologie se snaží zmenšit velikost uzlu historickým tempem, a to díky materiálovým obtížím pracujícím v měřítku nanometrů.

Aby to bylo možné obejít, moderní architekti CPU se rozhodli přidat k CPU více procesorových jader. Každé jádro procesoru může pracovat nezávisle na jiné úloze. I když nemohou kombinovat stejný problém, mohou pracovat na dvou problémech současně. Tato základní architektonická změna poskytuje spoustu dalšího výkonu, ale přímo neprospívá jednotlivým procesům, i když snižuje spor o čas procesoru.

Chcete-li využít výhod vícejádrových CPU, musí být kód napsán vícevláknovým způsobem. Každé vlákno pak může být spouštěno souběžně, škálovat přínos výkonu podle počtu dostupných vláken a jader CPU. Tím však narážíme na novou výzvu, „závodní podmínky“.

Poznámka: Některé úlohy nemohou být vícevláknové, zatímco jiné mohou být masivně vícevláknové. Možné výkonnostní výhody závisí na provedené práci.

Závodní podmínky

Vícevláknový software může využívat výhod více jader. V těchto vodách číhají nebezpečí, připraveni chytit nezkušeného programátora do pasti. Spor může nastat při interakci dvou různých vláken se stejným bitem paměti.

Jednoduchým příkladem mohou být dvě vlákna, která se pokoušejí kontrolovat a inkrementovat proměnnou současně. Řekněme, že a=0 . Dvě různá vlákna pak vykonávají své funkce a v určitém okamžiku zkontrolují a a zvýší je o jedno. Obecně byste očekávali, že výsledek dvou vláken přidaných jedna k nule bude dvě. Většinou by to tak mělo být. Můžete získat jiný výsledek, pokud obě vlákna projdou touto konkrétní funkcí přesně ve správný čas.

V tomto případě první vlákno čte hodnotu a . Než může první vlákno zvýšit hodnotu a ačkoli, druhé vlákno jej přečte. Nyní první vlákno přidá jedničku k nule, ale druhé vlákno již věří, že hodnota je nula, a přidá jedna k nule. Výsledkem je, že konečná hodnota a je 1, nikoli 2.

Závodění podle scénáře nejhoršího případu

I když výše uvedený příklad nemusí znít nijak zvlášť špatně, může mít dramatické účinky. Co když hodnota a určuje režim provozu stroje? Co když konkrétní režimy provozu tohoto stroje mohou být nebezpečné nebo dokonce život ohrožující?

Podmínky závodu také nemusí být tak jednoduché. Například může být možné, aby jedno vlákno četlo část paměti ve stejnou dobu, kdy do ní zapisuje jiné vlákno. V tomto případě může čtecí vlákno získat podivnou směs dat před a po. Řekněme, že kontrola je jednoduchá kontrola pravdivosti/nepravdy.

Pokud proměnná na začátku čtení uvedla true, ale byla v procesu přepisování na slovo false, výsledek operace čtení může být něco jako „trlse“. To není „pravda“ nebo „nepravda“. Nebýt jedné ze dvou možností v binárním výběru by téměř jistě vedlo k pádu aplikace. Toto poškození paměti může vést k mnoha bezpečnostním problémům, jako je odmítnutí služby a eskalace oprávnění.

Uzamčení závodu

Vědět, jaké bity paměti v programu jsou sdíleny mezi různými vlákny, je nezbytné, aby se zabránilo sporu. Pokud je proměnná řízena a přístupná pouze jedním vláknem, není třeba nic dělat. Pokud dvě nebo více vláken mohou přistupovat k proměnné, musíte zajistit, aby všechny operace na této části paměti byly dokončeny nezávisle na sobě.

Této nezávislosti je dosaženo díky zámku. Do kódu programu musíte při zápisu funkce, která funguje na sdílené části paměti, vložit zámek. Tento zámek blokuje přístup jiných vláken k této části paměti, dokud není zámek uvolněn.

Zámek není nejelegantnější řešení. Jednak má paměťovou režii. Může také přinutit vlákno k zavěšení a čeká na uvolnění zámku. V závislosti na situaci se zámek nemusí uvolnit po velmi dlouhou dobu nebo se nemusí uvolnit vůbec. V nejhorším případě může odemknutí zámku záviset na tom, že se něco stane v jiném zablokovaném vláknu, což povede k uváznutí.

Je nezbytné optimalizovat použití zámků. Můžete ovládat, jak zrnitý je zámek. Pokud například upravujete data v tabulce, můžete zamknout celou tabulku nebo zamknout pouze upravený řádek. Uzamčení celého stolu by znamenalo zámek hrubé granularity. Minimalizuje režii z implementace příliš mnoha zámků, ale zvyšuje šanci, že zámek zablokuje další vlákno. Uzamčení pouze řádku by znamenalo zámek jemné granularity. To je mnohem méně pravděpodobné, že bude narušovat ostatní vlákna, ale znamená to, že budou potřeba roztrhané zámky, což zvýší celkovou režii.

Závěr

Zámek paměti je kódový nástroj, který se používá k zajištění atomických operací v paměti ve vícevláknovém prostředí. Uzamčením části paměti před operací s ní si můžete být jisti, že kvůli sporu nemůže dojít k žádnému neočekávanému chování. Zámky paměti přicházejí s režií paměti, ale mohou také způsobit zablokování.

Blokování je místo, kde se jiné vlákno pokouší pracovat na uzamčeném pemory. Nit tam sedí, zablokovaná, dokud se zámek neuvolní. To může způsobit problémy, pokud uvolnění zámku vyžaduje, aby něco provedlo jiné vlákno, protože se může zablokovat dříve, než dokončí předpoklad pro uvolnění zámku, který jej blokuje. Zámkům paměti se lze vyhnout zápisem neblokovacích kódů. To však může být složité a méně výkonné než použití zámků. Nezapomeňte níže zanechat své komentáře.


Leave a Comment

10 Nejlepších NAS zařízení pro ukládání dat pro domácí a profesionální použití

10 Nejlepších NAS zařízení pro ukládání dat pro domácí a profesionální použití

Ať už hledáte NAS pro váš domov nebo kancelář, podívejte se na tento seznam nejlepších NAS zařízení pro ukládání dat.

Základy 3D tisku: Tipy na údržbu vaší 3D tiskárny

Základy 3D tisku: Tipy na údržbu vaší 3D tiskárny

Údržba vašich 3D tiskáren je velmi důležitá pro dosažení nejlepších výsledků. Zde jsou některé důležité tipy, které je dobré mít na paměti.

Jak připojit notebook s Windows 11 k projektoru/TV

Jak připojit notebook s Windows 11 k projektoru/TV

Přečtěte si tento článek, abyste se dozvěděli jednoduchý krok za krokem proces, jak připojit notebook k projektoru nebo TV v OS Windows 11 a Windows 10.

Jak opravit kód chyby GeForce Now 0xC272008F

Jak opravit kód chyby GeForce Now 0xC272008F

Připravujete se na večer her a bude to velké - právě jste si pořídili hru „Star Wars Outlaws“ na streamovací službě GeForce Now. Objevte jediný známý způsob, jak opravit kód chyby GeForce Now 0xC272008F, abyste mohli znovu hrát hry od Ubisoftu.

5 Důvodů, Proč Se Váš Notebook Přehřívá

5 Důvodů, Proč Se Váš Notebook Přehřívá

Zjistěte některé možné důvody, proč se váš notebook přehřívá, spolu s tipy a triky, jak tento problém vyřešit a udržet své zařízení v chladu.

Základy 3D tisku: Kontrolní seznam údržby, který si musíte přečíst

Základy 3D tisku: Kontrolní seznam údržby, který si musíte přečíst

Udržování vašeho vybavení v dobrém stavu je nezbytné. Zde jsou některé užitečné tipy, jak udržet váš 3D tiskárnu v nejlepším stavu.

Jak nainstalovat SSD na desktop a notebooky

Jak nainstalovat SSD na desktop a notebooky

Právě jste zakoupili SSD a chtěli byste upgradovat interní úložiště svého počítače, ale nevíte, jak SSD nainstalovat? Přečtěte si tento článek nyní!

Canon Pixma MG5220: Skenování bez inkoustu

Canon Pixma MG5220: Skenování bez inkoustu

Jak povolit skenování na Canon Pixma MG5220, když dojde inkoust.

Jak najít IP adresu tiskárny

Jak najít IP adresu tiskárny

Máte problémy s nalezením IP adresy tiskárny? Ukážeme vám, jak ji najít.

Jak používat AirPods s telefony Samsung

Jak používat AirPods s telefony Samsung

Pokud si nejste jisti, zda koupit AirPods pro váš telefon Samsung, tento průvodce vám může pomoci. Nejvíce evidentní otázka je, zda jsou obě zařízení kompatibilní, a odpověď je: Ano, jsou!