Подтвердить что ты не робот

Различие между линеаризуемостью и сериализуемостью

Я действительно путаюсь с линеаризуемостью и сериализуемостью w.r.t Java-программированием. Не могли бы вы объяснить разницу между ними с примером или предоставить хорошую ссылку.

4b9b3361

Ответ 1

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

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

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

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

Литература:

Подробнее:

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

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

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

Ответ 2

Здесь большое объяснение Питера Бейлиса:

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

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

Ответ 3

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

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

Ответ 4

Проверьте описание Википедии:

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

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