Livelock: Jaký je, příklad, rozdíl s Deadlock

⚡ Chytré shrnutí

Livelock je situace souběžnosti, kdy procesy neustále mění své stavy v reakci na sebe navzájem, ale nedosahují žádného skutečného pokroku, zůstávají aktivní a spotřebovávají cykly CPU, aniž by kdy dokončily své úkoly nebo se zablokovaly.

  • 🔁 Definice: K živému zablokování dochází, když procesy neustále mění stav, aby se navzájem přizpůsobily, ale nikdy nepostupují dále, na rozdíl od zamrzlých procesů v deadlocku.
  • 🚶 Příklad: Dva lidé krokujíping ze strany na stranu v chodbě, aby se navzájem nechali projít, ilustrují živý zámek, pohybující se nepřetržitě, ale nikdy se nekříží.
  • 🧮 Způsobit: Opakované dotazování a opětovné pokusy o nalezení zámků, ohraničené konečným počtem slotů v tabulce procesů, ženou procesy do stavu „livelock“, aniž by se kterýkoli z nich zablokoval.
  • 🇧🇷 Srovnání: Zablokování zmrazuje procesy, hladovění na dobu neurčitou odepírá zdroje a živé zablokování udržuje procesy zaneprázdněné bez jakéhokoli pokroku vpřed.
  • 🛡️ Prevence: Náhodné odkládání, limity opakovaných pokusů a řazení priorit přerušují symetrické opakované pokusy, které vytvářejí aktivní blokování.
  • 🤖 Úhel umělé inteligence: Strojové učení signalizuje vzory CPU, které vykazují nepokrok, a Copilot pomáhá psát kód pro backoff a řazení uzamčení, který se vyhne livelocku.

Živý zámek v Operasystém

Co je Livelock?

A livelock je situace, kdy je žádost o exkluzivní zámek opakovaně odmítnuta, protože mnoho z nich se překrýváping Sdílené zámky se neustále vzájemně ruší. Procesy neustále mění svůj stav, což jim brání v dokončení úkolu.

Příklady Livelocku

Příklad 1:

Nejjednodušším příkladem Livelocku jsou dva lidé, kteří se setkají tváří v tvář na chodbě a oba se ustoupí, aby nechali toho druhého projít. Pohybují se ze strany na stranu, aniž by se jakkoli posunuli vpřed, protože se pohybují stejným směrem ve stejnou dobu. Zde se nikdy nekříží.

Příklad 2:

Příklady Livelocku v Operasystém

Na obrázku výše každý ze dvou procesů potřebuje dva zdroje a pomocí primitivního dotazování se snaží získat potřebné zámky. Pokud pokus selže, metoda se pokusí znovu.

  1. Proces A drží zdroj Y
  2. Proces B obsahuje zdroj X
  3. Proces A vyžaduje zdroj X
  4. Proces B vyžaduje zdroj Y

Předpokládejme, že proces A běží jako první a získá zdroj X, a poté běží proces B a získá zdroj Y. Bez ohledu na to, který proces běží jako první, žádný z nich nedosáhne dalšího pokroku.

Ani jeden z těchto dvou procesů však není blokován. Opakovaně spotřebovávají prostředky CPU, aniž by dosáhly jakéhokoli pokroku, přesto se nikdy nezastaví kvůli bloku zpracování.

Tato situace proto není zablokování, protože ani jeden proces není blokován; místo toho čelíme situaci ekvivalentní deadlocku, který se nazývá LIVELOCK.

Co vede k Livelocku?

Živý uzamčení (Livelock) je vázáno na počet procesů, které systém povoluje, což je definováno celkovým počtem záznamů v tabulce procesů. Tyto sloty v tabulce procesů jsou proto považovány za konečné zdroje. Když se procesy opakovaně pokoušejí o tyto omezené zdroje a zároveň se navzájem neustále ustupují, žádný z nich nepokročí a systém vstoupí do stavu živého uzamčení (livelock).

Co je Deadlock?

A zablokování je situace, která nastává v operačním systému, když proces přejde do stavu čekání, protože jiný čekající proces drží požadovaný zdroj. Deadlock je běžný problém v multiprocessingu, kde několik procesů sdílí specifický typ vzájemně se vylučujícího zdroje, známý jako soft lock nebo software.

Příklad Deadlock

  • Příkladem z reálného světa by mohl být provoz, který jede pouze jedním směrem.
  • Zde je most považován za zdroj.
  • Když dojde k zablokování, lze jej snadno vyřešit, pokud jedno auto zacouvá (využívá zdroje a vrací se zpět).
  • Pokud dojde k uváznutí, může být nutné zálohovat několik vozů.
  • Proto je možné hladovění.

Příklad zablokování v Operasystém

Příklad Deadlock

Co je to hladovění?

Hladovění je situace, kdy jsou procesy s nízkou prioritou blokovány, zatímco procesy s vysokou prioritou běží. V jakémkoli systému se požadavky na zdroje s vysokou a nízkou prioritou neustále dynamicky vyskytují. Proto je nutná určitá politika, která určí, kdo a kdy bude obsloužen.

U některých algoritmů nemusí určité procesy získat požadovanou službu, i když nejsou v deadlocku. K hladovění dochází, když některá vlákna znemožní sdílené zdroje po delší dobu.

Příklad hladovění

Například objekt nabízí synchronizovanou metodu, jejíž návratová hodnota bude pravděpodobně trvat dlouho. Pokud jedno vlákno tuto metodu často používá, ostatní vlákna, která také potřebují častý synchronizovaný přístup ke stejnému objektu, jsou často blokována.

Rozdíl mezi Deadlock, Hladověním a Livelockem

  • Zablokování je situace, která nastane v operačním systému, když proces přejde do stavu čekání, protože požadovaný zdroj je držen jiným čekajícím procesem.
  • Livelock je na druhou stranu téměř podobný deadlocku, až na to, že stavy procesů zapojených do livelocku se neustále mění v reakci na sebe navzájem, aniž by se jakýkoli z nich progressoval.
  • Livelock je tedy unikátním případem nedostatku zdrojů.

Nejčastější dotazy

Livelock se snižuje přidáním náhodnosti nebo řazení opakovaných pokusů. Mezi techniky patří randomizované nebo exponenciální odložení před opakovaným pokusem, omezeníping počet pokusů o opakování a vynucení pevného pořadí získávání zámků, aby procesy přestaly zrcadlit vzájemné pohyby.

Ne. Živě zablokované procesy nejsou nikdy blokovány – běží stále a spotřebovávají cykly CPU neustálými pokusy o provedení operace, aniž by dosahovaly žádného pokroku. V případě deadlocku se zúčastněné procesy zastaví a čekají, takže CPU nepoužívají.

Často ano. Zablokované procesy zůstávají zamrzlé, což lze snadno odhalit, zatímco aktivní zablokované procesy zůstávají aktivní a neustále mění svůj stav. Detekce obvykle hledá vysoké využití CPU v kombinaci s nulovým pokrokem vpřed v čase.

Soubojový stav je nesprávný nebo nepředvídatelný výsledek způsobený nesynchronizovaným přístupem ke sdíleným datům. Livelock naopak zahrnuje procesy, které zůstávají aktivní a neustále mění stav v reakci na sebe navzájem, aniž by kdy dokončily svou práci.

Ano. Vlákna, která na sebe opakovaně reagují – například uvolňují a znovu vyžadují zámek ve stejném okamžiku – se mohou aktivně zablokovat, aniž by se kdy zablokovala. Často se to objevuje v logice opakování a odstavení, která postrádá náhodnost.

Modely strojového učení studují vzorce využití CPU, plánování a zdrojů, aby označily procesy, které spalují cykly bez postupu. To pomáhá operátorům zachytit uzamčení živého provozu dříve, než je stanoveno, zejména u velkých cloudových a datových center s mnoha interagujícími procesy.

Ano. GitHub Copilot může navrhnout náhodné odložení, časové limity a konzistentní vzorce řazení zámků, které snižují riziko jak živého, tak i deadlocku. Vývojáři by si i tak měli pečlivě prohlédnout vygenerovanou logiku souběžnosti, protože jemné chyby v časování lze snadno přehlédnout.

Někdy. Pokud se časování posune – například kvůli náhodným intervalům opakování – procesy mohou tento vzorec přerušit a pokračovat. Bez takových změn může livelock přetrvávat donekonečna a plýtvat CPU, dokud žádný proces nedokončí svůj úkol.

Shrňte tento příspěvek takto: