> векторные часы обладают неприятными свойствами: они вводят условную зависимость между событиями там, где ее нет, и теряют ее там, где она на самом деле есть.
Если размер вектора равен числу процессов, то векторные часы точно отражают зависимости в системе.
> Несуществующие зависимости возникают потому, что логические часы вводят полный порядок на событиях
Показания векторных часов только частично упорядочены.
Статья (или перевод) вводит в заблуждение. Классический компьютер, т.е. (детерминированная) машина Тьюринга, может решить любую задачу решаемую квантовым компьютером. В cтатье (или опять же, в переводе) утеряна разница между «решаемо» и «эффективно решаемо», и между «computability» и «complexity».
> и хотя во время выполнения значение, хранящееся в переменной интерфейса, может изменять тип, это значение всегда будет удовлетворять интерфейсу. (Никаких undefined, NaN и прочих ломающих логику программы вещей.)
Во-первых, переводчик улучшил Пайка, добавив предложение в скобках. :-) Во-вторых, переменная интерфейсного типа может хранить nil — значение не удовлетворяющее интерфейсу и ломающее логику.
«Сильный» программист, наверное, заметит, что команды X(номер, цвет) для разных значений параметра «номер» коммутативны (могут выполняться в произвольном порядке), а для одинаковых — нет. Это наблюдение сразу дает все три варианта A, B и C. Ну и по завету Дейкстры («детерминизм — частный случай недетерминизма»), напишет параллельную программу, для которой ABC являются сериализациями.
А почему pivot выбирается именно как элемент массива с некоторым индексом? В случае quicksort это понятно, но для quickselect можно выбрать любое значение (не обязательно из массива). Например, брать среднее (O(n)), тогда массив будет гарантированно хорошо делиться.
Считывать с нескольких блинов одновременно невозможно. Дорожки не расположены точно друг над другом (невозможно при современных плотностях записи). После позиционирования на цилиндр, головка делает более точное позиционирование на дорожку на конкретном блине, при этом дорожки на остальных блинах недоступны.
В Ситибанке несколько лет назад для защиты от keylogger-ов пароль вводился через «виртуальную клавиатуру» (т.е. на сайте надо было мышкой кликать в нарисованные буковки), и на этой клавиатуре не было смены регистра. Клавиатура давно пропала, на пароли, ясно дело, остались с тех пор case insensitive.
Такие технологии становятся по-настоящему полезными только когда данные разнесены не только по устройствам на одной машине, но и по многим машинам в сети. Сетевой RAID сложно сделать на аппаратном уровне (как говорит raidixteam слишком гибкие конфигурации).
Первое, что я сделал для Люстры был OSX клиент, но он так и не был выпущен, потому что Apple поменял VFS интерфейс в следующей версии Дарвина. Потом было много чего: новый сервер мета-данных (http://wiki.lustre.org/images/b/b8/LUG08-head-mds-danilov.pdf), новый клиентский IO стек (http://wiki.lustre.org/images/6/66/CLIO-TOI.pdf) и пр. Про новую систему (Mero) есть обзор: http://www.pdsw.org/pdsw-discs16/wips/danilov-wip-pdsw-discs16.pdf.
Можно
Если размер вектора равен числу процессов, то векторные часы точно отражают зависимости в системе.
> Несуществующие зависимости возникают потому, что логические часы вводят полный порядок на событиях
Показания векторных часов только частично упорядочены.
Во-первых, переводчик улучшил Пайка, добавив предложение в скобках. :-) Во-вторых, переменная интерфейсного типа может хранить nil — значение не удовлетворяющее интерфейсу и ломающее логику.
Классика: https://en.m.wikipedia.org/wiki/LambdaMOO