В чем разница между линеаризуемостью и сериализуемостью? - PullRequest
44 голосов
/ 14 ноября 2010

В чем разница между линеаризуемостью и сериализуемостью (в контексте Java)?Можете ли вы объяснить разницу между ними на примере или предоставить хорошую справку?

Ответы [ 4 ]

54 голосов
/ 15 ноября 2010

Центральное различие между ними заключается в том, что сериализуемость является свойством global ; свойство всей истории операций / транзакций. Линеаризуемость является локальной собственностью ; свойство отдельной операции / транзакции. Другое отличие состоит в том, что линеаризуемость включает в себя понятие в реальном времени , чего нет в сериализуемости: точка линеаризации операции должна находиться между временем ее вызова и откликом. (См. Тим Харрис: Транзакционная память, 2ed . См. Слайды Херлихи из Искусство многопроцессорного программирования, раздел о линеаризации , которые доступны здесь , для некоторых примеры и доказательства.

Оба свойства нацелены на одну и ту же цель: последовательная согласованность. Из бумаги Херлихи:

Большая часть работы с базами данных и распределенными системами использует сериализуемость в качестве основного условия корректности для параллельных вычислений. В этой модели транзакция является потоком управления, который применяет конечную последовательность примитивных операций к набору объектов, совместно используемых с другими транзакциями. История является сериализуемой, если она эквивалентна истории, в которой транзакции выполняются последовательно, то есть без чередования. (Неполный) порядок приоритета может быть определен для неперекрывающихся пар транзакций очевидным образом. История строго сериализуема, если порядок транзакций в последовательной истории совместим с порядком их приоритета ...

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

Ссылки:

Подробнее:

Если вы действительно заботитесь об этом, прочитайте статью с введенными определениями. Для линеаризуемости это Линеаризуемость: условие корректности для параллельных объектов , Herlihy и Wing . Это плотно, но стоит внимания. Обратите внимание, что в сообществе программной транзакционной памяти остается открытым вопрос, является ли линеаризуемость правильной целью / свойством, к которому нужно стремиться.

Сериализуемость - это результат набора операций / "система", которая может быть выражена в виде определенного порядка ("как если бы выполнение было выполнено в определенном порядке ...") всех операций.Линеаризуемость - это свойство одного подмножества операций в системе ... операция / набор операций являются линеаризуемыми, если они кажутся другим операциям, как если бы они произошли в определенный момент (логического) времени по отношению к другим.Каноническая статья здесь Papadimitriou, Сериализуемость одновременных обновлений базы данных .

Подумайте об «атомарной операции», когда вы думаете о «линеаризуемости».Операции (набора) линеаризуются, когда они (кажется) происходят атомарно по отношению к другим частям системы.Распространенная формулировка «создайте иллюзию, что каждая операция вступает в силу мгновенно между ее вызовом и ответом».Формулировка линеаризуемость обусловлена ​​ Herlihy , которая подчеркивает, что это локальное свойство, по сравнению с другими видами последовательных свойств согласованности, такими как «сериализуемость», которые являются глобальными.

10 голосов
/ 25 ноября 2014

Питер Бэйлис предлагает отличное объяснение:

"На простом английском языке при линеаризуемость записи должны казаться мгновенными. Неточно, после завершения записи все последующие чтения (где« позже »определяется временем начала настенных часов) должны возвращаться значение этой записи или значение более поздней записи. Как только чтение возвращает определенное значение, все последующие чтения должны возвращать это значение или значение более поздней записи. "

" Сериализуемость - это гарантия транзакций или групп из одной или нескольких операций над одним или несколькими объектами. Она гарантирует, что выполнение набора транзакций (обычно содержащих операции чтения и записи) для нескольких items эквивалентен некоторому последовательному выполнению (полному порядку) транзакций. "

3 голосов
/ 15 ноября 2010

См. Ответ @ andersoj для ясного описания различия между сериализуемостью и линеаризуемостью.

Это только косвенно относится к параллельному программированию на Java. В общем, параллельная Java-программа не должна иметь сериализуемую или линеаризуемую историю. В этих случаях сериализуемость, как правило, достаточна для «корректности» программы (Java или иным образом), хотя для конкретных задач может потребоваться более сильное свойство линеаризации. Но так или иначе, именно проблема определяет требования к корректности, а не Java.

2 голосов
/ 14 ноября 2010

Проверьте объяснение Википедии:

http://en.wikipedia.org/wiki/Linearizability#Linearizability_versus_serializability

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

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