Pipedija - tautosaka, gandai, kliedesiai ir jokios tiesos! Durniausia wiki enciklopedija durnapedija!
Tarpusavio blokavimas
Tarpusavio blokavimas arba deadlokas (anglų kalba - deadlock) - tai tokia situacija, kai bevykstant kokiai nors transakcijai, du procesai vienas kitam užpirdolina kokius nors muteksus taip, kad užsiblokuotų abu neatstatomai ir negrįžtamai. O jei duomenų bazė kokia nors geresnė, sugebanti atkurti savo būseną iki išjungimo, tai gali būti, kad net ir po serverių perkrovimo tokie tarpusavio blokavimai išliks. Žodžiu, džiaugsmas ir adminams, ir vartotojams.
Kaip tai veikia? Ogi paprastai.
Įsivaizduokit, kad turite sąskaitą banke, ir tenai pervedinėjate pinigus.
Jūsų sąskaitoje yra, tarkim, 1000 eurų, ir jūsų draugo Jono sąskaitoje irgi yra 1000 eurų. Viskas tvarkoje, pinigų pakanka.
Dabar jūs pradedate pinigų pervedimą Jonui - 100 eurų. Kad kas nors neatsitiktų negero, jūsų sukeltas pinigų pervedimo procesas pirmiausiai blokuoja jūsų sąskaitą, kad joje kas nors neprišiktų, kol daromi skaičiavimai. Tada nuskaičiuoja nuo jūsų sąskaitos 100 eurų. Tada, pakolei vis dar vykdomas jūsų sąskaitos blokavimas, bando užblokuoti jūsų draugo Jono sąskaitą, kad galėtų prie jos saugiai pridėti 100 eurų.
Bet tuo pat metu Jonas irgi darė jums pervedimą - 100 eurų, ir jo sąskaitą pinigų pervedimo procesas irgi blokavo, iš jos išimdamas 100 eurų, o pakolei vyko blokavimas, kreipėsi į jūsų sąskaitą, bandydamas ją užblokuoti, kad galėtų pridėti prie jos 100 eurų.
Tai kas gavosi? Ogi Jono sąskaita blokuota, todėl jūsų pinigų pevedimo procesas negali užbaigti savo darbo ir dėl to jūsų sąskaita lieka irgi blokuota. O Jonas jums irgi negali pervesti pinigų, nes jūsų sąskaita blokuota jūsų daryto pervedimo.
O kadangi normaliomis sąlygomis transakcijų negalima šiaip sau imti ir nutraukti, tai šitaip dvi transakcijos lieka kaboti. Ir daugiau niekas nei Jonui, nei jums negali padaryti pavedimų. Ir jūs irgi niekam daugiau negalit padaryti pavedimų, ir Jonas negali padaryti pavedimų.
Teoriškai galų gale kažkada turi įvykti taimoutas ir transakcijas vykdžiusios programos abiem atvejais turi sąskaitas grąžinti į pirminę būseną ir pranešti, kad pavedimai nepavyko ir neįvyko.
Deja, kartais tokie blokavimai gali užtrukti labai ilgai, kad visi užsipistų laukt - net ne minutes, o valandas, o kartais ir dienas.