А как насчет параллелизма по сети с использованием нескольких ПК? - PullRequest
2 голосов
/ 11 июня 2010

Параллельные вычисления используются все больше и больше, а новые функциональные возможности и ярлыки облегчают использование (например, параллельные расширения, которые непосредственно доступны в .NET 4).

Теперь о параллелизме в сети?Я имею в виду абстракцию всего, что связано с коммуникациями, созданием процессов на удаленных машинах и т. Д. Что-то вроде C #:

NetworkParallel.ForEach(myEnumerable, () =>
{
    // Computing and/or access to web ressource or local network database here
});

Я понимаю, что это сильно отличается от многоядерного параллелизма.Два наиболее очевидных различия, вероятно, будут следующими:

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

Несмотря на эти различия, такой параллелизм вполне возможен, даже не говоря о распределенной архитектуре.

Как вы думаете, будет ли этореализован через несколько лет?Согласны ли вы с тем, что он позволяет разработчикам легко и без особых усилий разрабатывать чрезвычайно мощные материалы?

Пример:
Подумайте о бизнес-приложении, которое извлекает данные из базы данных, преобразовывает их и отображает статистику.Допустим, этому приложению требуется десять секунд для загрузки данных, двадцать секунд для преобразования данных и десять секунд для построения диаграмм на одной машине в компании, используя весь ЦП, тогда как десять других машин большую часть времени используются на 5% ЦП.,В таком случае каждое действие может быть выполнено параллельно, в результате чего для общего процесса может потребоваться от шести до десяти секунд вместо сорока.

Ответы [ 2 ]

3 голосов
/ 11 июня 2010

Обычно это обрабатывается не так, как внутрипроцессный параллелизм. Проблемы, возникающие из-за архитектуры, намного больше, а нехватка разделяемой памяти вызывает другие проблемы.

При этом «параллелизм в сети» используется очень давно. Наиболее распространенным вариантом является использование Интерфейс передачи сообщений (MPI) . Для этого есть даже библиотека C #, MPI.NET .

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

1 голос
/ 11 июня 2010

А как насчет параллелизма в сети? Я имею в виду абстракцию всего, что связано с коммуникациями, созданием процессов на удаленных машинах и т. Д.

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

...