2014-09-28 18 views
10

Qualcuno può spiegarmi le definizioni e le differenze tra coerenza sequenziale e coerenza quiescente? Nella forma più stupida possibile: |Quali sono le differenze tra coerenza sequenziale e coerenza quiescente?

ho letto questo: Example of execution which is sequentially consistent but not quiescently consistent

Ma io non sono in grado di capire la consistenza sequenziale e di riposo per sé :(

+0

Vedere: http: // coldattic.info/shvedsky/pro/blog/a-foo-cammina-in-a-bar/post/88 – jessehouwing

+1

Consistenza quiescente significa che una struttura dati è considerata coerente dopo l'esecuzione di un'operazione su di essa e prima che su di essa venga eseguita un'altra (cioè nel tempo "tranquillo"). Consistenza sequenziale significa che la struttura rimane coerente indipendentemente da quale operazione di ordine viene eseguita su di essa da diversi thread. –

+0

@jessehouwing Grazie, il link ha aiutato molto. – theCuriousOne

risposta

1

primo luogo si dovrebbe capire che cosa è l'ordine del programma, è letteralmente come ci si aspetta le tue corse programma nell'ordine dell'aspetto delle istruzioni

Ma un ordine di programma è solo per un programma a thread singolo, se si dispone di multithread, quindi il problema si presenta in quanto l'ordine del programma potrebbe non contenere o addirittura non esistere, a volte non si può dire quale La chiamata al metodo di thread viene eseguita per prima.

Una coerenza quiescente descrive un ordine di programma chiaro di tutti i comportamenti dei thread. non sono consentite sovrapposizioni poiché è richiesto un periodo di riposo tra due chiamate di metodo.

Una coerenza sequenziale consente le sovrapposizioni, ma richiede che sia possibile trovare un ordine di programma in cui tutte le chiamate al metodo possano essere inserite in un posto e restituiscano ancora il valore corretto e si comportino correttamente.

+0

Beh, quando si dice "la coerenza quiescente descrive un chiaro ordine di programma" significa che le chiamate al metodo di programma separate da punti di quiescenza appaiono complete ad altre. Come in --- ---- (quiescent period) ------ -. Le chiamate effettuate nell'insieme 'a' da più thread saranno completate e saranno visibili alle chiamate nel set di chiamate di metodo 'b' come completo. – theCuriousOne

+0

La coerenza sequenziale ha più a che fare con l'ordine di programma di un thread. Le chiamate all'interno del thread devono essere nell'ordine del programma. Le chiamate sovrapposte di altri thread possono essere spostate come desiderato. Tuttavia, il movimento non può cambiare l'ordine di programma dell'altro thread. Le chiamate sovrapposte/non sovrapposte tra due thread possono essere riordinate come si desidera mantenendo intatto l'ordine di programma di ogni thread. – theCuriousOne

9

La coerenza sequenziale richiede che le operazioni sembrino avere effetto nell'ordine in cui sono specificate in ciascun programma. Fondamentalmente impone l'ordine del programma all'interno di ogni singolo processo e consente a tutti i processi di assumere che stiano osservando lo stesso ordine di operazioni. Diciamo che abbiamo 2 processi di accodamento e rimozione dalla coda gli elementi in una coda q:

P1 -- q.enq(x) ----------------------------- 
P2 -------------- q.enq(y) ---- q.deq():y -- 

Questo non è il comportamento previsto da una coda FIFO. Ci aspettiamo di rimuoverlo x perché P1 accoda lo x prima che P2 acceda allo . Tuttavia, questo scenario è consentito nel modello di coerenza sequenziale perché la coerenza sequenziale non richiede che l'ordine visto da tutti i processi sia corretto (ordine in tempo reale). C'è almeno un esecuzione sequenziale che possono spiegare questi risultati e uno è:

P2:q.enq(y) P1:q.enq(x) P2:q.deq():y 

In questa esecuzione ogni processo esegue operazioni al fine programma significa che ogni processo esegue le sue operazioni nel nell'ordine in cui sono specificati in ogni processo .

La consistenza quiescente richiede che le operazioni non sovrapposte abbiano effetto nel loro ordine in tempo reale, ma le operazioni di sovrapposizione potrebbero essere riordinate. Pertanto, lo stesso scenario non è ammesso nel modello di coerenza quiescente poiché ci aspettiamo che q.enq(x) abbia effetto prima del q.enq(y) e q.deq() per restituire x anziché . Anche la coerenza quiescente non preserva necessariamente l'ordine del programma. Se q.enq(x) e q.enq(y) sarebbero operazioni concorrenti (che si sovrappongono), potrebbero essere riordinate e q.deq():y sarebbe ininterrottamente coerente.

Fondamentalmente alcune esecuzioni sono sequenzialmente coerenti ma non quiescentemente coerenti e viceversa.

Problemi correlati