Livelock: Mikä on esimerkki, ero umpikujaan

⚡ Älykäs yhteenveto

Livelock on samanaikaisuustilanne, jossa prosessit muuttavat tilojaan toistensa reagoidessa, mutta eivät edisty todellisuudessa, vaan pysyvät aktiivisina ja kuluttavat suorittimen käyttöikää suorittamatta tehtäviään loppuun tai estymättä.

  • 🔁 Määritelmä: Livelock-tilassa prosessit muuttavat jatkuvasti tilaansa sopeutuakseen toisiinsa, mutta eivät koskaan etene, toisin kuin umpikujassa olevat jäätyneet prosessit.
  • 🚶 Esimerkiksi: Kaksi ihmistä astuuping käytävällä sivusuunnassa toisensa ohittamiseksi havainnollistavat jatkuvaa liikkumista, mutta eivät koskaan ylitä vuoroaan.
  • 🧮 Syy: Toistuvat kyselyt ja uudelleenyritykset lukkojen löytämiseksi, joita rajoittavat äärelliset prosessitaulukkopaikat, ajavat prosessit livelock-tilaan ilman, että mikään niistä lukkiutuu.
  • 🇧🇷 Vertailu: Lukkiutuminen jäädyttää prosessit, nälkiintyminen estää resurssien käytön loputtomiin ja livelock pitää prosessit kiireisinä ilman edistymistä.
  • 🛡️ ennaltaehkäisy: Satunnaistettu peruutus, uudelleenyritysten rajoitukset ja prioriteettijärjestys rikkovat symmetriset uudelleenyritykset, jotka luovat livelockin.
  • 🤖 Tekoälyn kulma: Koneoppiminen merkitsee edistymättömät suorittimen toimintamallit, ja Copilot auttaa kirjoittamaan backoff- ja lock-järjestyskoodia, joka välttää live-lukituksen.

Livelock sisään Operating System

Mikä on Livelock?

A livelock on tilanne, jossa yksinoikeuslukkopyyntö hylätään toistuvasti, koska monta päällekkäistä pyyntöäping Jaetut lukot häiritsevät jatkuvasti toisiaan. Prosessien tila muuttuu jatkuvasti, mikä estää niitä suorittamasta tehtävää.

Esimerkkejä Livelockista

Esimerkki 1:

Helpoin esimerkki Livelockista on kaksi ihmistä, jotka kohtaavat kasvotusten käytävällä ja molemmat siirtyvät sivuun päästääkseen toisensa kulkemaan. He liikkuvat jatkuvasti puolelta toiselle edistymättä, koska he liikkuvat samaan suuntaan samaan aikaan. Tässä he eivät koskaan ylitä toisiaan.

Esimerkki 2:

Esimerkkejä Livelockista Operating System

Yllä olevassa kuvassa kumpikin prosessi tarvitsee kaksi resurssia, ja ne käyttävät primitiivistä kyselyä yrittäessään hankkia tarvitsemansa lukot. Jos yritys epäonnistuu, metodi yrittää uudelleen.

  1. Prosessi A pitää hallussaan resurssia Y
  2. Prosessi B sisältää resurssin X
  3. Prosessi A vaatii resurssin X
  4. Prosessi B vaatii resurssin Y

Oletetaan, että prosessi A käynnistyy ensin ja hankkii resurssin X, ja sitten prosessi B käynnistyy ja hankkii resurssin Y. Riippumatta siitä, kumpi prosessi käynnistyy ensin, kumpikaan niistä ei etene pidemmälle.

Kumpaakaan prosessia ei kuitenkaan estetä. Ne käyttävät suorittimen resursseja toistuvasti edistymättä, mutta eivät koskaan pysähdy käsittelyblokin ajaksi.

Siksi tämä tilanne ei ole umpikuja, koska yhtäkään prosessia ei ole estetty; sen sijaan kohtaamme lukkiutumista vastaavan tilanteen, jota kutsutaan nimellä LIVELOCK.

Mikä johtaa Livelockiin?

Livelock-tilanne on sidottu järjestelmän sallimien prosessien määrään, joka määritellään prosessitaulukon merkintöjen kokonaismääränä. Näitä prosessitaulukon paikkoja käsitellään siksi rajallisina resursseina. Kun prosessit toistuvasti yrittävät käyttää näitä rajallisia resursseja antaen jatkuvasti periksi toisilleen, mikään niistä ei edisty, ja järjestelmä siirtyy livelock-tilaan.

Mikä on umpikuja?

A umpikuja on tilanne, joka syntyy käyttöjärjestelmässä, kun prosessi siirtyy odotustilaan, koska toinen odottava prosessi pitää hallussaan vaadittua resurssia. Lukkiutuminen on yleinen ongelma moniajoprosessoinnissa, jossa useat prosessit jakavat tietyn tyyppisen toisensa poissulkevan resurssin, joka tunnetaan nimellä pehmeä lukko tai ohjelmistolukko.

Esimerkki umpikujasta

  • Todellinen esimerkki olisi liikenne, joka kulkee vain yhteen suuntaan.
  • Tässä siltaa pidetään resurssina.
  • Kun umpikujaan tulee tilanne, se voidaan ratkaista helposti, jos yksi auto peruuttaa (resurssien hyödyntäminen ja peruuttaminen).
  • Useita autoja voidaan joutua peruuttamaan, jos lukkiutumista tapahtuu.
  • Siksi nälkäkuolema on mahdollinen.

Esimerkki umpikujasta Operating System

Esimerkki umpikujasta

Mitä on nälkä?

Nälkä on tilanne, jossa matalan prioriteetin prosessit estetään, kun taas korkean prioriteetin prosessit jatkavat toimintaansa. Missä tahansa järjestelmässä korkean ja matalan prioriteetin resurssien pyyntöjä tapahtuu dynaamisesti. Siksi tarvitaan jonkinlainen käytäntö sen päättämiseksi, kenelle pyyntöjä tarjotaan ja milloin.

Joillakin algoritmeilla tietyt prosessit eivät välttämättä saa haluttua palvelua, vaikka ne eivät olisikaan lukkiutuneina. Nälkätila syntyy, kun jotkut säikeet estävät jaettuja resursseja käyttämästä pitkäksi aikaa.

Esimerkki nälkään

Esimerkiksi objekti tarjoaa synkronoidun metodin, jonka palauttaminen todennäköisesti kestää kauan. Jos yksi säie käyttää tätä metodia usein, muut säikeet, jotka myös tarvitsevat usein synkronoitua pääsyä samaan objektiin, usein estetään.

Ero Deadlockin, Starvationin ja Livelockin välillä

  • Lukkiutumistila on tilanne, joka syntyy käyttöjärjestelmässä, kun prosessi siirtyy odotustilaan, koska vaadittu resurssi on toisen odottavan prosessin hallussa.
  • Livelock-tilanne on puolestaan ​​lähes samanlainen kuin umpikuja, paitsi että livelock-tilaan liittyvien prosessien tilat muuttuvat jatkuvasti toistensa mukaan eikä mikään niistä etene.
  • Joten livelock on ainutlaatuinen esimerkki resurssien puutteesta.

UKK

Livelockia vähennetään lisäämällä uudelleenyrityksiin satunnaisuutta tai järjestämistä. Tekniikoita ovat mm. satunnaistettu tai eksponentiaalinen peruutus ennen uudelleenyritystä, rajoitusping uudelleenyritysten määrää ja kiinteän lukituksen hankintajärjestyksen valvontaa, jotta prosessit lakkaavat peilaamasta toistensa liikkeitä.

Ei. Lukittuja prosesseja ei koskaan estetä — ne jatkavat suoritusta ja kuluttavat suorittimen käyttöikää jatkuvilla uudelleenyrityksillä edetessään. Lukkiutumistilassa mukana olevat prosessit pysähtyvät ja odottavat, joten ne eivät käytä suoritinta.

Usein kyllä. Lukkiutuneet prosessit ovat jumiutuneet, mikä on helppo havaita, kun taas aktiivisesti lukkiutuneet prosessit pysyvät aktiivisina ja vaihtavat tilaansa jatkuvasti. Havaitseminen etsii yleensä korkeaa suorittimen käyttöä yhdistettynä nollaedistykseen ajan kuluessa.

Kilpailutilanne on virheellinen tai arvaamaton tulos, jonka aiheuttaa jaetun datan synkronoimaton käyttö. Livelock sitä vastoin sisältää prosesseja, jotka pysyvät aktiivisina ja muuttavat tilaansa toistensa vaikutuksesta koskaan saamatta työtään valmiiksi.

Kyllä. Säikeet, jotka toistuvasti reagoivat toisiinsa – esimerkiksi sekä vapauttavat että pyytävät lukitusta uudelleen samaan aikaan – voivat lukittua itseensä ilman, että ne koskaan estyvät. Tämä tapahtuu usein uudelleenyritys- ja peruutuslogiikassa, josta puuttuu satunnaisuus.

Koneoppimismallit tutkivat suorittimen, aikataulutuksen ja resurssien käytön malleja merkitäkseen prosesseja, jotka polttavat syklejä etenemättä. Tämä auttaa operaattoreita havaitsemaan käyttökatkokset aikaisemmin kuin kiinteiden kynnysarvojen saavuttamisen jälkeen, erityisesti suurissa pilvi- ja datakeskustyökuormissa, joissa on paljon vuorovaikutuksessa olevia prosesseja.

Kyllä. GitHub Copilot voi ehdottaa satunnaistettuja peruutuksia, aikakatkaisuja ja yhdenmukaisia ​​lukitusjärjestysmalleja, jotka pienentävät sekä live-lukituksen että lukkiutumisen riskiä. Kehittäjien tulisi silti tarkistaa luotu samanaikaisuuslogiikka huolellisesti, koska hienovaraiset ajoitusvirheet on helppo jättää huomaamatta.

Joskus. Jos ajoitus muuttuu – esimerkiksi satunnaisten uudelleenyritysvälien vuoksi – prosessit voivat rikkoa kuvion ja jatkaa. Ilman tällaisia ​​muutoksia livelock-tilanne voi jatkua loputtomiin, kuluttaen prosessoria, kun mikään prosessi ei suorita tehtäväänsä loppuun.

Tiivistä tämä viesti seuraavasti: