В чем разница между последовательной согласованностью и непротиворечивостью?

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

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

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


person Community    schedule 28.09.2014    source источник
comment
См.: coldattic.info/shvedsky/ pro/blogs/a-foo-ходит-в-бар/posts/   -  person jessehouwing    schedule 29.09.2014
comment
Непротиворечивая согласованность означает, что структура данных считается согласованной после выполнения над ней операции и до того, как над ней будет выполнена другая операция (т. е. в спокойное время). Последовательная согласованность означает, что структура остается согласованной независимо от того, в каком порядке выполняются над ней операции из разных потоков.   -  person Peter Ritchie    schedule 29.09.2014
comment
@jessehouwing Спасибо, ссылка очень помогла.   -  person    schedule 05.11.2014
comment
@PeterRitchie: Спасибо и вам. Теперь понял принцип :)   -  person    schedule 05.11.2014


Ответы (2)


Последовательная согласованность требует, чтобы операции вступали в силу в том порядке, в котором они указаны в каждой программе. По сути, он обеспечивает порядок выполнения программ внутри каждого отдельного процесса и позволяет всем процессам предполагать, что они соблюдают один и тот же порядок операций. Допустим, у нас есть 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 была бы непротиворечивой.

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

person Selim Ekizoglu    schedule 11.08.2016
comment
Обратите внимание, что непересекающиеся события не обязательно должны быть разделены периодом затишья. Таким образом, характеристика стационарной согласованности слишком строгая: она должна позволять переупорядочивать непересекающиеся события (при условии, что какой-то вызов метода остается незавершенным в течение всего интервала между ними). - person mmw; 18.02.2020
comment
По сути, он обеспечивает порядок программ в каждом отдельном процессе. Это не так. Он обеспечивает выполнение, которое может быть полностью объяснено хотя бы одним чередованием потоков, работающих в порядке программы, который отличается от того, что вы описали (обратите внимание, как это предотвратит любую оптимизацию компилятора). - person devoured elysium; 25.07.2021

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

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

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

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

person elexonics    schedule 23.10.2014
comment
Ну, когда вы говорите, что непротиворечивость описывает четкий порядок программы, это означает, что вызовы методов программы, разделенные точками покоя, кажутся завершенными по отношению к другим. Как и в ---‹вызов метода установлен a ›---- (период покоя) ------ ‹вызов метода установлен b ›-- . Вызовы, сделанные в наборе «a» несколькими потоками, будут завершены и будут видны для вызовов в наборе вызовов метода «b» как завершенные. - person ; 05.11.2014
comment
Последовательная согласованность больше связана с порядком выполнения программы в потоке. Вызовы внутри потока должны быть в порядке программы. Перекрывающиеся вызовы других потоков можно перемещать по желанию. Однако движение не может изменить порядок программы другого потока. т. е. Перекрывающиеся/неперекрывающиеся вызовы между двумя потоками могут быть переупорядочены по желанию, сохраняя порядок программы каждого потока без изменений. - person ; 05.11.2014