sequential - sistema - ¿Cuáles son las diferencias entre la consistencia secuencial y la consistencia quiescente?
que es la consistencia en un sistema distribuido (2)
¿Puede alguien explicarme las definiciones y las diferencias entre la consistencia secuencial y la consistencia quiescente? En la forma más tonta posible: |
Leí esto: Ejemplo de ejecución que es secuencialmente consistente pero no quiescently consistente
Pero no puedo entender la coherencia secuencial y quiescente en sí misma :(
Primero debe entender qué es el orden del programa, es literalmente cómo espera que su programa se ejecute en el orden en que aparecen las instrucciones.
Pero el orden de un programa es solo para un programa de un solo subproceso, si tiene varios subprocesos, entonces el problema viene porque el orden del programa no se puede mantener o incluso no existe, ya que a veces no puede saber qué método de llamada del subproceso ocurre primero.
Una consistencia inactiva describe un orden de programa claro de todos los comportamientos de los hilos. es decir, no se permiten superposiciones ya que se requiere un período de inactividad entre dos llamadas de método.
Una coherencia secuencial permite superposiciones, pero requiere que se pueda encontrar un orden de programa en el que todas las llamadas de método se puedan colocar en un lugar y aún así devuelva el valor correcto y se comporte correctamente.
La consistencia secuencial requiere que las operaciones parezcan tener efecto en el orden en que se especifican en cada programa. Básicamente, impone el orden del programa dentro de cada proceso individual y permite que todos los procesos asuman que están observando el mismo orden de operaciones. Digamos que tenemos 2 procesos en cola y en cola de cola en una cola q
:
P1 -- q.enq(x) -----------------------------
P2 -------------- q.enq(y) ---- q.deq():y --
Este no es el comportamiento esperado de una cola FIFO. Esperaríamos encolar x porque P1 pone en cola x
antes de P2 encoja y
. Sin embargo, este escenario está permitido en el modelo de consistencia secuencial porque la consistencia secuencial no requiere que el orden visto por todos los procesos sea correcto (orden en tiempo real). Hay al menos una ejecución secuencial que puede explicar estos resultados y una es:
P2:q.enq(y) P1:q.enq(x) P2:q.deq():y
En esta ejecución, cada proceso ejecuta operaciones en orden de programa, lo que significa que cada proceso ejecuta sus operaciones en el orden en que se especifican en cada proceso.
La consistencia inactiva requiere que las operaciones no superpuestas aparezcan para tener efecto en su orden en tiempo real, pero las operaciones superpuestas pueden reordenarse. Por lo tanto, no se permite el mismo escenario en el modelo de consistencia inactivo porque esperamos que q.enq(x)
parezca tener efecto antes de q.enq(y)
, y q.deq()
devuelva x
lugar de y
. Además, la consistencia inactiva no necesariamente conserva el orden del programa. Si q.enq(x)
y q.enq(y)
fueran operaciones concurrentes (superpuestas), se podrían reordenar y q.deq():y
sería absolutamente consistente.
Básicamente, algunas ejecuciones son secuencialmente consistentes pero no son quiescientemente consistentes, y viceversa.