V počítačové vědě je konzistence schopnost systému přemýšlet o kopii datové položky o úpravách provedených v jiných kopiích těchto dat. Tato představa se používá hlavně ve třech počítačových oblastech: souborové systémy , databáze a sdílené paměti . Omezující model konzistence („silná“ konzistence) umožňuje intuitivní chování a zjednodušuje pochopení chování programu, ale „slabé“ nebo „uvolněné“ modely konzistence často umožňují zlepšení výkonu. “V případě potřeby zajistěte konzistenci dat.
Pro databáze se často používá jednoduché první rozlišení konzistence.
Nechť A je vztažný bod. Lze jej číst a upravovat pomocí několika kopií {C1, C2, ... Cn}. Předpokládejme, že C1 se změní na C1 '. Systém pro správu dat A zajišťuje vysokou konzistenci, pokud jakékoli čtení kopie Cx po úpravě vrátí C1 '. V slabě koherentním systému by čtení C2 mohlo dát starou verzi A.
Konzistence je obecně složitější. Model konzistence je sada záruk, které jsou poskytovány pro souběžný přístup k datům. Je možné mnoho modelů soudržnosti a my vám představíme jen část z nich.
Modely jsou rozděleny do dvou skupin podle toho, zda obsahují instrukce „ synchronizace “, které umožňují vynutit silnější konzistenci dat.
Nejpřísnějším nesynchronizačním modelem konzistence je ten, který přesně odpovídá „ideálnímu zobrazení“ dat. Prezentované modely konzistence přecházejí od nejpřísnějších k nejrychlejším (v době provádění).
Přísná konzistenceMluvíme o atomové, nedělitelné, přísné nebo nepřerušitelné soudržnosti, když čtení vždy vrátí výsledek posledního provedeného zápisu, což implikuje existenci globální časové základny. Tento model konzistence je nejsilnější, jaký existuje.
Silná konzistenceŘíkáme, že existuje silná konzistence, pokud jsou kdykoli (tj. V jakémkoli bodě pozorování) všechny kopie dat identické. Konkrétní aplikace by byla:
Tento model konzistence je bohužel z hlediska zdrojů velmi nákladný. Konzistence je zajištěna za všech okolností, i když to není nutné.
Postupná konzistenceVýsledek libovolného provedení je stejný, jako kdyby byly operace všech procesů provedeny v jakémkoli sekvenčním pořadí a operace každého procesu by se objevily v tomto pořadí v pořadí určeném jejich programem. Stručně řečeno, u všech přístupů do paměti existuje globální (celkové) pořadí, které zachovává pořadí programu.
Okamžitá konzistence je na rozdíl od dlouhodobé konzistence. Operace zápisu je dokončena, pouze pokud byly synchronizovány všechny procesy nebo uzly. Současně vystavujeme tuto novou hodnotu. Existují dvě hlavní řešení pro okamžitou konzistenci:
Model je slabší než sekvenční koherence, protože bereme v úvahu pouze události spojené kauzálním vztahem. Model konzistence je kauzální, pokud zaručuje následující dvě podmínky:
Zvažte následující příklad. Předpokládá se, že proces P1 zapisuje do proměnné X. Potom P2 čte X a zapisuje Y. Zde je čtení X a zápis Y pomocí P2 potenciálně kauzálně spojeno, protože zápis Y může záviset na hodnotě X .
Konzistence PRAM a FIFOKauzální soudržnost může být dále oslabena, vezmeme-li v úvahu pouze kauzalitu v rámci jednoho procesu, nikoli mezi různými procesy. Konzistence PRAM ( zřetězená RAM kvůli Liptonovi a Sandbergovi) určuje, že zápisy ze stejného procesu vidí ostatní v pořadí, v jakém jsou vytvářeny. Na druhou stranu neexistuje žádné omezení v pořadí, ve kterém se objevují procesy různých procesů.
Konzistence objektů a mezipamětiPokud všichni aktéři vidí zápisy na stejném objektu (v databázi) nebo na stejném paměťovém místě ve stejném pořadí; mluvíme o konzistenci objektů a konzistenci mezipaměti - jedná se o „přirozenou“ konzistenci při použití protokolu konzistence mezipaměti . Když je tento model spojen s konzistencí PRAM, mluvíme o konzistenci procesoru.
Konzistence v časeModel případné konzistence vyžaduje na jedné straně to, aby spisy procesu nevyhnutelně viděli i ostatní, ale bez omezení termínu nebo objednávky; a na druhou stranu, že když se aktualizace zastaví, všechny procesy sledují stejný stav. Toto je nejslabší model konzistence používaný v praxi.
Protože tento přístup umožňuje souběžné zápisy, musí systém konflikty vyřešit. Existují tři řešení:
Ve skutečnosti není vždy nutné vždy zajistit konzistenci. Odtud tedy pochází myšlenka vynucení pouze v případě potřeby pomocí proměnných a synchronizačních operací. V těchto modelech se synchronizační pokyny používají k dočasnému použití silnější konzistence. Tyto pokyny jsou obecně „překážkami“, které zajišťují, že předchozí přístupy byly viditelné pro všechny subjekty. Díky tomu je možné pomocí informací o plánovaných přístupech jemně určit proměnné, které mají být chráněny. Motivací je snížit počet operací konzistence.
Nízká konzistenceVe slabé koherenci se rozlišuje mezi běžnými přístupy a synchronizačními operacemi. Nesynchronizovaný přístup neukládá žádná konkrétní omezení. Na druhou stranu synchronizace vyžadují, aby byly ukončeny všechny předchozí přístupy (aby byla provedena čtení a aby byly zápisy viditelné pro všechny aktéry) a aby nové přístupy čekaly na konec synchronizačních instrukcí, které pro svou část , postupujte podle vzoru postupné konzistence.
Programátor nebo kompilátor je zodpovědný za umístění synchronizačních pokynů, aby byla zajištěna konzistence v případě potřeby.
Konzistence při vydáníKoherence při uvolnění je podobná slabé koherenci, ale podléhá dvěma operacím: zamykání a odemykání pro synchronizaci. Před úpravou objektu v paměti je nutné jej získat zamknutím, aby se mohl odemknout. Úpravy, které leží mezi těmito dvěma operacemi, se provádějí v „kritické oblasti“.
Model konzistence je volný, pokud zaručuje následující tři vlastnosti:
Soudržnost při vstupu je blízká soudržnosti při uvolnění. Rozdíl je v tom, že každá nezávisle změněná proměnná musí být spojena s konkrétním zámkem. Během operace uzamčení se aktualizují pouze proměnné spojené s použitým zámkem.
Formálně konzistence při vstupu vyžaduje tři podmínky:
Konzistence Delta synchronizuje celý systém v pravidelných časových intervalech. Jinými slovy, výsledek čtení paměti je konzistentní, s výjimkou krátké doby, kdy ještě nebyla provedena synchronizace. Pokud byl tedy paměťový prostor upraven, bude přístup ke čtení krátkodobě nekonzistentní. Budete muset počkat, než proběhne synchronizace.
Soudržnost vektoremTento model konzistence je navržen tak, aby minimalizoval čas přístupu k datům v blízkosti zdroje. Obvykle jej lze použít v prostředí, jako je videohra, k minimalizaci šířky pásma. Hráči se skutečně potřebují dozvědět určité informace rychleji a spolehlivěji, jak se blíží cílová pozice. To vyžaduje vícerozměrné schéma založené na poli vektorů používaných k udržení konzistence. Soudržnost vektorovým polem vyzařuje z polí generátoru spojených s čepy (přehrávač). S rostoucí vzdáleností se intenzita pole snižuje.
V multiprocesorových systémech se vzory konzistence liší. Volná konzistence umožňuje určité optimalizace. Některé modely konzistence například umožňují pokračovat v provádění bez čekání na zviditelnění výsledku zápisu pro všechny procesory prostřednictvím vyrovnávací paměti. Přítomnost mezipamětí je přizpůsobena implementací protokolů určených k zajištění jejich konzistence .