Возможно ли реализовать Прегель в Эрланге без сверхшагов?


Предположим, что мы реализуем Pregel с помощью Erlang. Зачем нам вообще нужны суперстепы? Не лучше ли просто отправлять сообщения от одного супервизора процессам, представляющим узлы? Они могут просто применить функцию вычисления к себе, отправить сообщения друг другу, а затем отправить сообщение "готово" супервизору.

В чем заключается цель супершагов в параллельной эрланговой реализации Прегеля?

1 3

1 ответ:

    Концепция Сверхшага, предложенная моделью Прегеля, может рассматриваться как своего рода барьер для параллельных исполняющих сущностей. В конце каждого супер-шага каждый работник сбрасывает его состояние в постоянный магазин.
  • алгоритм имеет контрольную точку в конце каждого Супершага, так что в случае сбоя, когда новый узел должен взять на себя функцию отказавшего узла, у него есть точка, с которой можно начать. Pregel гарантирует, что, поскольку данные узла были сброшены на диск ранее, Супершаг начался, он может надежно стартовать именно с этой точки.
  • Это также в некотором роде означает "прогресс" алгоритма. Алгоритм/задание Прегеля может быть снабжен "максимальным числом супершагов", после которых алгоритм должен завершиться.

То, что вы указали в своем вопросе (о том, что супервизоры посылают работнику вычислительную функцию и ждут "сделано"), определенно может быть реализовано (хотя я не думаю, что текущий супервизор, упакованный с OTP, может делать такие вещи, как это из коробки), но я думаю, что концепция Супершага-это просто требование модели Прегеля. С другой стороны, если бы вы реализовывали что-то вроде параллельного картографа (например, то, что Джо реализует в своей книге), вам не понадобились бы supersteps/