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

Параллельные методы программирования, плюсы, минусы

Существует не менее трех известных подходов к созданию параллельных приложений:

  • Многопоточность и синхронизация памяти с помощью блокировки (.NET, Java). Программная транзакционная память (текст ссылки) - еще один подход к синхронизации.

  • Передача асинхронного сообщения (Erlang).

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

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

4b9b3361

Ответ 1

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

В основном это подчеркивает:

  • Блокированные, многопоточные параллельные приложения
  • Непрерывные постоянные структуры данных
  • Изменения состояния, выполняемые с помощью транзакционной памяти программного обеспечения

И говорит о том, как эти принципы повлияли на дизайн Clojure.

Ответ 3

С API Java 5 concurrency выполнение параллельного программирования на Java не должно быть громоздким и трудным, если вы воспользуетесь утилитами высокого уровня и правильно их используете. Я нашел книгу, Java concurrency на практике Брайана Гетца, чтобы быть отличным читателем по этому вопросу. На моей последней работе я использовал методы из этой книги, чтобы сделать некоторые алгоритмы обработки изображений масштабными для нескольких процессоров и для выполнения задач ЦП и дисков. Я нашел, что это отличный опыт, и мы получили отличные результаты.

Или, если вы используете С++, вы можете попробовать OpenMP, который использует директивы #pragma, чтобы сделать циклы параллельными, хотя я никогда не использовал его сам.

Ответ 4

В Erlang и OTP в действии авторы представляют четыре парадигмы коммуникации:

  • Общая память с замками

    Конструкция (блокировка) используется для ограничить доступ к общим ресурсам. Часто требуется поддержка оборудования из системы памяти, с точки зрения Специальные инструкции. Среди возможных недостатков этого подхода: накладные расходы, споры в системе памяти, сложность отладки, особенно с огромным количеством процессов.

  • Программная транзакционная память

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

  • Фьючерсы, promises и подобные

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

  • Передача сообщений

    Синхронный или асинхронный, в Стиль Эрланг.