Ответ 1
Последовательная согласованность требует, чтобы операции работали в порядке, указанном в каждой программе. В основном это обеспечивает порядок программ в каждом отдельном процессе и позволяет всем процессам предполагать, что они соблюдают один и тот же порядок операций. Предположим, что у нас есть 2 процесса, которые задерживают и деинсталлируют элементы в очереди q
:
P1 -- q.enq(x) -----------------------------
P2 -------------- q.enq(y) ---- q.deq():y --
Это не ожидаемое поведение из очереди FIFO. Мы ожидаем, что вычеркните x, потому что P1 помещает x
до того, как P2 запустит y
. Однако этот сценарий разрешен в модели последовательной согласованности, поскольку последовательная согласованность не требует правильности порядка, наблюдаемого всеми процессами (порядок в реальном времени). Там, по крайней мере, одно последовательное выполнение, которое может объяснить эти результаты, и одно:
P2:q.enq(y) P1:q.enq(x) P2:q.deq():y
В этом выполнении каждый процесс выполняет операции в программном порядке, означая, что каждый процесс выполняет свои операции в том порядке, в котором они указаны в каждом процессе.
Консистенция покоя требует, чтобы операции с неперекрывающимися окнами вступали в силу в их режиме реального времени, но операции перекрытия могут быть переупорядочены. Таким образом, такой же сценарий не допускается в модели согласованности покоя, потому что мы ожидаем, что q.enq(x)
появится в силе до q.enq(y)
и q.deq()
, чтобы вернуть x
вместо y
. Также постоянная последовательность не обязательно сохраняет порядок программы. Если q.enq(x)
и q.enq(y)
будут параллельными (перекрывающимися) операциями, они могут быть переупорядочены, а q.deq():y
будет непротиворечивым.
В принципе, некоторые исполнения последовательно последовательны, но не согласуются друг с другом, и наоборот.