for (int i = 1; i < list.length; i++)
list[i] = list[i - 1];
эквивалентно:
list [1] = list [1-1] = list [0] = 1 list [2] = list [2-1] = list [1 ] = 1 список [3] = список [3-1] = список [2] = 1 список [4] = список [4-1] = список [3] = 1 список [5] = список [5-1] = list [4] = 1
Получил?
MPI был разработан с сильной связью, вычисляют кластеры с быстрыми, надежными сетями. Распространение и ГMQ разработаны для больших распределенных систем. При разработке параллельного научного приложения пойдите с MPI, но если Вы разрабатываете персистентную распределенную систему, которая должна быть эластичной к отказам и сетевой нестабильности, использовать одного из других.
MPI имеет очень ограниченные средства для отказоустойчивости; поведение обработки ошибок по умолчанию в большинстве реализаций является сбоем в масштабе всей системы. Кроме того, семантика MPI требуют, чтобы все сообщения, отправленные в конечном счете, были использованы. Это имеет много смысла для моделирований на кластере, но не для распределенного приложения.
Я не пользовался ни одной из этих библиотек, но я могу быть в состоянии дать некоторые подсказки.
Так, это действительно зависит от того, пытаетесь ли Вы создать параллельную систему или распределенную систему. Они связаны друг с другом, но подразумеваемые коннотации/цели отличаются. Параллельное программирование имеет дело с увеличением вычислительной мощности при помощи нескольких компьютеров одновременно. Распределенное программирование имеет дело с надежным (последовательный, отказоустойчивый и высоконадежный) группа компьютеров.
понятие "надежности" немного отличается от того из TCP. Надежность TCP, "дают этому пакету до конца программу несмотря ни на что." Надежность распределенного программирования, "даже если некоторые машины перестают работать, система в целом продолжает работать последовательным способом". Чтобы действительно гарантировать, что все участники получили сообщение, можно было бы быть нужно что-то как 2 фиксации фазы или одна из более быстрых альтернатив.