[MWy] Re: dotaz na middleware
Petr Tuma
petr.tuma at mff.cuni.cz
Mon Jun 6 11:38:52 CEST 2005
Dobry den,
> ucim se na zkousku z middleware a narazil jsem na zajimavy problem. Kdyz
> jsem se zamyslel nad CAUSAL ORDERINGEM, zacal jsem si vlastne rikat, k
> cemu to je? Vzdyt to prece rika jen, ze se musi prijimout nejaka zprava
> v procesu B az po odeslani procesem A a tranzitivne.
> Taky to samorejme rika, ze udalosti jsou kauzalne po sobe, pokud jsou v
> jednom procesu spousteny jedna po druhe.
>
> Prijde mi to slabsi podminka nez treba source ordering a myslim, ze je
> skoro k nicemu. Pamatuju si, ze jste nam tam ale ukazoval nejake
> konzistentni a nekonzistentni rezy stavem programu. Na ty se to sice
> hodi, ale ten nekonzistentni rez prece ani nemuze v praxi nastat nebo ano?
>
> Vymyslel jsem s kamaradem priklady porusujici causal ordering a jedine,
> co nas napadlo je:
>
> SEND( A, X -> B)
> SEND( A, Y -> B)
> RECV(B, Y)
> RECV(B, X)
>
> Tenhle priklad porusuje source ordering, ale nezda se nam ze by
> porusoval causal. A nemuzeme s kamaradem prijit na priklad ktery ano,
> pokud by nemel byt uplne nesmyslny, jako ze B prijme neco co A jeste ani
> neodeslalo :))
No ... mate a nemate pravdu a je to nejspis moje chyba, ze jsem na to na
prednasce neupozornil :-( omlouvam se. S definici kauzality je trochu
problem v tom, ze se zpravidla vztahuje k udalostem:
"Udalost A je kauzalne pred B, pokud A je pred B v jednom procesu nebo A
je odeslani zpravy M a B je prijem zpravy M, nebo existuje udalost C,
kde A je kauzalne pred C a C je kauzalne pred B."
Tehle relaci se rika "Lamport's Happens-Before Relation" (a nekdy take
"Causality Relation") a je to zpravidla ta, ktera se ukazuje, protoze
dobre vysvetluje intuitivni chapani kauzality. Bohuzel se tyka udalosti
a nikoliv zprav, takze se primo nehodi pro usporadani zprav. Neprimo je
mozne ji pouzit nekolika zpusoby:
- Uprava relace tak, aby byla mezi zpravami a nikoliv mezi udalostmi:
"Zprava A je kauzalne pred B, pokud A je odeslana pred tim, nez B je
odeslana v jednom procesu, nebo A je prijata pred tim, nez B je odeslana
v jednom procesu, nebo existuje zprava C, kde A je kauzalne pred C a C
je kauzalne pred B." Pak se definuje: "Zpravy jsou dorucovany v
kauzalnim usporadani, kdyz pokud A je kauzalne pred B, pak zadnemu
procesu neni doruceno B pred A."
- Pouziti stavajici relace a vztazeni usporadani zprav k udalostem
jejich odeslani: "Zpravy jsou dorucovany v kauzalnim usporadani, kdyz
pokud odeslani A je kauzalne pred odeslanim B, pak zadnemu procesu neni
doruceno B pred A."
- Pouziti stavajici relace a vztazeni usporadani zprav k jejich obsahu:
"Zpravy jsou dorucovany v kauzalnim usporadani, kdyz pokud obsah zpravy
A informuje o udalosti X a obsah zpravy B informuje o udalosti Y a X je
kauzalne pred Y, pak zadnemu procesu neni doruceno B pred A." Tohle je
tak trochu necista definice, protoze skryte predpoklada, ze obsah kazde
zpravy mimo jine informuje o jejim odeslani.
Formalne nejcistsi je asi ten druhy zpusob z uvedenych tri ... ale
setkat se muzete se vsemi tremi, nebo i jen z volnym "zpravy jsou
dorucovany v poradi, ktere neporusuje kauzalni usporadani", coz je
samozrejme formalne nedostacujici.
Tak, doufam, ze jsem to vysvetlil presne :-) mimochodem, toto byla z
vasi strany dobra pripominka !
Petr Tuma
More information about the NSWI080
mailing list