Каковы различия между последовательной согласованностью и непротиворечивой последовательностью?

Может ли кто-нибудь объяснить мне определения и различия между последовательной согласованностью и постоянной покоем? В самой немой форме возможно: |

Я читал это: Пример выполнения, который последовательно последователен, но не всегда согласуется

Но я не могу понять последовательную и постоянную последовательность: (

Ответ 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 будет непротиворечивым.

В принципе, некоторые исполнения последовательно последовательны, но не согласуются друг с другом, и наоборот.

Ответ 2

Сначала вы должны понимать, что такое порядок программы, буквально вы ожидаете, что ваша программа будет работать в порядке появления инструкций.

Но порядок программы предназначен только для одной программы потока, если у вас многопоточность, тогда проблема возникает, поскольку порядок выполнения программы может не выполняться или даже не существовать, поскольку иногда вы не можете определить, какой вызов метода потока происходит первым.

Постоянная согласованность описывает четкий порядок программ поведения всех потоков. что не допускается перекрытие, поскольку для двух вызовов метода требуется период покоя.

Последовательная согласованность позволяет перекрывать, но требует, чтобы можно было найти порядок программы, в котором все вызовы метода могут быть помещены в место и по-прежнему верны правильное значение и ведут себя корректно.