Koordinace přístupu ke sdílenému stavu pomocí konzistentního zamykacího protokolu zajišťuje, že kterékoli vlákno držící zámek chránící sadu proměnných má výhradní přístup k těmto proměnným a že jakékoli změny provedené v těchto proměnných jsou viditelné pro ostatní vlákna, která následně získají zámek.

Moderní JVM dokážou poměrně efektivně optimalizovat bezkonkurenční získávání a uvolňování zámků, ale pokud o zámek požádá více vláken současně, JVM požádá o pomoc operační systém. Pokud se dostane do tohoto bodu, některé nešťastné vlákno bude pozastaveno a bude muset být obnoveno později.[1] Když je toto vlákno obnoveno, možná bude muset počkat, až ostatní vlákna dokončí svá plánovací kvanta, než bude skutečně naplánováno. Pozastavení a obnovení vlákna má spoustu režií a obecně znamená dlouhé přerušení. U tříd založených na zámku s jemnozrnnými operacemi (jako jsou třídy synchronizovaných kolekcí, kde většina metod obsahuje pouze několik operací), může být poměr režie plánování k užitečné práci poměrně vysoký, když se často bojuje o zámek.

[1] Inteligentní JVM nemusí nutně pozastavit vlákno, pokud bojuje o zámek; mohl by použít profilovací data k adaptivnímu rozhodování mezi odpružením a uzamčením otáčení na základě toho, jak dlouho byl zámek držen během předchozích akvizic.

Nestálé proměnné jsou lehčí synchronizační mechanismus než zamykání, protože nezahrnují přepínání kontextu ani plánování vláken. Nestálé proměnné však mají ve srovnání se zamykáním určitá omezení: ačkoli poskytují podobné záruky viditelnosti, nelze je použít ke konstrukci atomových složených akcí. To znamená, že nestálé proměnné nelze použít, když jedna proměnná závisí na jiné, nebo když nová hodnota proměnné závisí na její staré hodnotě. To omezuje, kdy jsou nestálé proměnné vhodné, protože je nelze použít ke spolehlivé implementaci běžných nástrojů, jako jsou čítače nebo mutexy.[2]

[2] Teoreticky je možné, i když zcela nepraktické, používat sémantiku Prchavé konstruovat mutexy a další synchronizátory; viz (Raynal, 1986).

Například při operaci zvýšení (++i) může vypadat jako atomická operace, ve skutečnosti jde o tři různé operace, které načtou aktuální hodnotu proměnné, přidají k ní jednu a pak zapíšou aktualizovanou hodnotu zpět. Aby nedošlo ke ztrátě aktualizace, musí být celá operace čtení-úpravy-zápisu atomická. Zatím jediný způsob, jak toho dosáhnout, je zamykání, jako v Counter na straně 56.

ČTĚTE VÍCE
Je možné zvýšit stav počítadla kilometrů?

Counter je bezpečný pro vlákna a v přítomnosti malého nebo žádného sporu funguje dobře. Při sporu však výkon trpí kvůli režii přepínání kontextu a zpožděním plánování. Když jsou zámky drženy tak krátce, uspání je tvrdý trest za to, že o zámek požádáte ve špatnou dobu.

Zamykání má několik dalších nevýhod. Když vlákno čeká na zámek, nemůže dělat nic jiného. Pokud je vlákno držící zámek zpožděno (kvůli chybě stránky, zpoždění plánování nebo podobně), pak žádné vlákno, které tento zámek potřebuje, nemůže dosáhnout pokroku. To může být vážný problém, pokud je zablokované vlákno vlákno s vysokou prioritou, ale vlákno držící zámek představuje riziko výkonu vlákna s nižší prioritou známé jako inverze priority. I když by vlákno s vyšší prioritou mělo mít přednost, musí počkat, dokud se zámek neuvolní, a tím se jeho priorita efektivně sníží na prioritu vlákna s nižší prioritou. Pokud je vlákno držící zámek trvale zablokováno (kvůli nekonečné smyčce, zablokování, živému zámku nebo jinému selhání živosti), žádná vlákna čekající na tento zámek nemohou nikdy pokročit.

I při ignorování těchto nebezpečí je zamykání jednoduše těžkým mechanismem pro jemnozrnné operace, jako je zvýšení počítadla. Bylo by hezké mít jemnější techniku ​​pro řízení sporů mezi vlákny něco jako nestálé proměnné, ale zároveň nabízet možnost atomických aktualizací. Moderní procesory nám naštěstí přesně takový mechanismus nabízejí.

  • Úvod
  • (Velmi) stručná historie souběžnosti
  • Výhody vláken
  • Rizika vláken
  • Vlákna jsou všude

Bloomberg LP Interview Otázka pro vývojáře finančního softwaru

bloomberg-lp-interview-questions

z 0 hlasů
Napište mi, když lidé komentují.
Napište mi, když lidé komentují.
Při přihlašování k odběru došlo k chybě.
Země: United States
Typ rozhovoru: Telefonický rozhovor
Napište mi, když lidé komentují.
Napište mi, když lidé komentují.
Při přihlašování k odběru došlo k chybě.
Komentář byl skryt z důvodu nízkého skóre. Kliknutím rozbalíte.

Nevýhoda:
Někdy při použití zámků (např. v případě obsluhy vlákna a přerušení) jsou přerušení a/nebo preempce zakázána. V důsledku toho jsou přerušení ignorována/řazena do fronty a zpožděna nebo proces nemůže zaměnit a proces s vyšší prioritou musí čekat. Ovlivňuje normální provoz OS.

ČTĚTE VÍCE
Jaký je rychlostní limit na klíči Volvo Care?

Hladovění:
Nekonečné čekání u vlákna, protože další vlákna stále přicházejí.

Zablokování:
Počet vláken čekajících na prostředky držené jinými vlákny.

Komentář byl skryt z důvodu nízkého skóre. Kliknutím rozbalíte.

Nevýhody zámků:
1) přidává režii za každý přístup, i když je pravděpodobnost kolize velmi vzácná.
2) uváznutí, kde každé dvě vlákna drží zámek na zdrojích, které druhý potřebuje, než uvolní svůj zámek.
3) pokud jedno vlákno držící zámek zemře před odemknutím zdrojů, všechna ostatní vlákna, která na něj čekají, budou navždy zablokována
4) vlákna s vysokou prioritou nemohou pokračovat, pokud vlákno s nízkou prioritou drží společný zámek
atd.

Komentář byl skryt z důvodu nízkého skóre. Kliknutím rozbalíte.

nejsem si jistý nevýhodou zámků. K hladovění dojde, když jeden nebo více procesů v programu zablokuje přístup ze zdrojů.
Zablokování nastane, když jedno nebo více vláken na sebe čeká.

Komentář byl skryt z důvodu nízkého skóre. Kliknutím rozbalíte.

Nevýhody zámků:
Do kritické sekce může vstoupit pouze jedno vlákno, pokud je zde více čtenářů a mohou číst současně, není to v tomto případě optimální.

Zablokování:
Dochází k tomu, když vlákno nebo sada vláken navzájem čekají na dokončení, a tak to nikdo nikdy neudělá.

„Zablokování nemůže nastat, pokud nejsou splněny všechny následující podmínky:
Chráněný přístup ke sdíleným zdrojům, což znamená čekání.
Žádná preempce zdrojů, což znamená, že systém nemůže násilně odebrat zdroj z vlákna, které jej drží.
Více nezávislých požadavků, což znamená, že vlákno může obsahovat některé zdroje, zatímco požaduje jiné.
Kruhový graf závislosti, což znamená, že vlákno A čeká na vlákno B, které čeká na vlákno C, které čeká na vlákno D, které čeká na vlákno A.»

Hladovění:
“Hladovění je stejně problematický stav, ve kterém jedno nebo více vláken nedělá pokrok.”

— orangetime23 17. května 2013 | Označit odpověď

Komentář byl skryt z důvodu nízkého skóre. Kliknutím rozbalíte.

může někdo uvést nevýhody zámků plz?

— Anonym 27. července 2013 | Označit odpověď

Komentář byl skryt z důvodu nízkého skóre. Kliknutím rozbalíte.

Nevýhody zámků:
Čas je strávený získáváním a uvolňováním zámků, které mohou ovlivnit výkon.

ČTĚTE VÍCE
Vlastní Pontiac Nissan?

— Anonym 15. září 2013 | Označit odpověď

Komentář byl skryt z důvodu nízkého skóre. Kliknutím rozbalíte.

nevýhody:
Způsobují blokování, což znamená, že některá vlákna/procesy musí čekat, dokud se zámek (nebo celá sada zámků) neuvolní. Pokud jedno z vláken držících zámek zemře, zastaví se/zablokuje nebo přejde do jakékoli nekonečné smyčky, další vlákna čekající na zámek mohou čekat navždy.
Manipulace se zámky zvyšuje režii pro každý přístup ke zdroji, i když je pravděpodobnost kolize velmi vzácná. (Nicméně jakákoli šance na takové kolize je podmínkou závodu.)
Zámky mohou být náchylné k poruchám a poruchám, které jsou často velmi jemné a může být obtížné je spolehlivě reprodukovat. Jedním příkladem je uváznutí, kde (alespoň) dvě vlákna každé drží zámek, který drží druhé vlákno, a nevzdá se, dokud nezíská druhý zámek.
Soupeření o zámek omezuje škálovatelnost a zvyšuje složitost.
Rovnováhy mezi režií uzamčení a sporem mohou být jedinečné pro dané problémové domény (aplikace) a také citlivé na návrh, implementaci a dokonce i na změny architektury systému na nízké úrovni. Tyto zůstatky se mohou v průběhu životního cyklu jakékoli dané aplikace/implementace měnit a mohou znamenat obrovské změny v aktualizaci (znovu vyvážení).
Zámky jsou pouze skládací (např. správa více souběžných zámků za účelem atomického odstranění položky X z tabulky A a vložení X do tabulky B) s relativně propracovanou (režijní) softwarovou podporou a perfektním dodržováním přísných konvencí programováním aplikací.
Prioritní inverze. Vlákno/proces s nízkou prioritou držící společný zámek může zabránit vláknům/procesům s vysokou prioritou v pokračování. Protokol stropu priority lze použít k zabránění inverze priority. K minimalizaci trvání inverze priority lze použít dědičnost priority.
Přepravování. Všechna ostatní vlákna musí čekat, pokud je plán vlákna obsahujícího zámek zrušen kvůli přerušení časového úseku nebo chybě stránky (viz konvoj zámků)
Těžko laditelné: Chyby spojené se zámky jsou závislé na čase. Je velmi obtížné je replikovat.
převzato z wiki.

— priyan 10. října 2014 | Označit odpověď

Komentář byl skryt z důvodu nízkého skóre. Kliknutím rozbalíte.

deadlock je situace, kdy vlákna čekají na prostředky, které drží jiné čekající vlákno.

Hladovění je situace, kdy proces nezíská zdroj, na který dlouho čeká, protože tento zdroj je již obsazen jiným procesem.