Сравните модели параллельных вычислений: многопоточность с общей памятью, акторная модель, поток данных (dataflow), и MapReduce — для каких задач и ограничений каждая модель наиболее подходяща

24 Ноя в 09:23
1 +1
0
Ответы
1
Кратко — для каждой модели: суть, когда выбирать, её ограничения и примеры.
Многопоточность с общей памятью
- Суть: несколько потоков разделяют адресное пространство; синхронизация через мьютексы/атомарные операции/барьеры.
- Подходит для: низколатентных, плотно связанных задач с частым обменом данными (HPC, численные расчёты, in‑memory структуры), когда параллелизм вписывается в одну машину (до PPP ядер).
- Ограничения: сложности с гонками, дедлоками, отладкой; масштабируется плохо за пределы одной машины (ограничение памяти/шины/NUMA); узкие места — contention и пропускная способность памяти.
- Примеры: pthreads, OpenMP, TBB.
Акторная модель
- Суть: состояние инкапсулировано в акторах; коммуникация только через асинхронные сообщения; нет общего состояния.
- Подходит для: большого числа независимых сущностей, отказоустойчивых распределённых сервисов, реактивных систем, систем с долгоживущими процессами и требований к изоляции состояния (Erlang/Akka); удобна для масштабирования по узлам с лёгкой изоляцией ошибок.
- Ограничения: накладные расходы на обмен сообщениями; упорядочивание/гарантии доставки могут влиять на поведение; не оптимальна для плотных численных вычислений с общей памятью; возможна непредсказуемая нетерминологичность порядка сообщений.
- Примеры: Erlang/OTP, Akka, Orleans.
Поток данных (dataflow)
- Суть: вычисление задаётся как граф (узлы — операции, рёбра — потоки данных); узел запускается при наличии входных токенов.
- Подходит для: детерминированных DAG‑задач, потоковой обработки, сигналов/потоков, конвейерной обработки и некоторых ML/компиляционных задач; хороша для автоматического распараллеливания и балансировки при известной зависимой структуре.
- Ограничения: сложнее выражать динамически меняющиеся зависимости; управление состоянием/окнами и буферами требует дополнительной логики; накладные расходы планировщика; не всегда удобна для случайных fine‑grained взаимодействий.
- Примеры: TensorFlow (граф вычислений), Apache Flink (streaming), графовые ускорители.
MapReduce
- Суть: парадигма «map» → shuffle → «reduce» над парами ключ‑значение; ориентирована на пакетную обработку больших данных с автоматическим распределением и восстановлением.
- Подходит для: массовой пакетной обработки больших наборов данных, агрегаций, сортировок и ETL на кластерах (когда NNN данных ≫ число узлов); хороша при требовании отказоустойчивости и data‑locality.
- Ограничения: неэффективна для малой задержки или интерактивных/итеративных расчётов (shuffle дорог); ограничена шаблоном map/reduce (хотя расширения и многопроходные фреймворки уменьшают это); сетевой трафик при shuffle может быть узким местом.
- Примеры: Hadoop MapReduce, Spark (более гибкий, in‑memory).
Краткие рекомендации выбора
- Нужна максимальная производительность и тесная связь с памятью на одной машине → многопоточность.
- Нужно большое число изолированных сущностей, масштабирование/отказоустойчивость в распределённой системе → акторы.
- Задача выражается как DAG или поток данных (стриминг, пайплайны, детерминизм) → dataflow.
- Массовая пакетная обработка больших объёмов данных с упором на простую параллельную агрегацию и отказоустойчивость → MapReduce.
Комбинации распространены: например, внутри узла — многопоточность, между узлами — акторы или dataflow; MapReduce/ Spark используются для масштабной пакетной обработки, а акторы — для оркестрации и realtime компонентов.
24 Ноя в 09:32
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир