Многопоточные приложения на архитектуре MPP
Короче:
Стоит ли усилий по добавлению многопоточной масштабируемости (вертикальная масштабируемость) в приложение, которое будет всегда работать в инфраструктуре MPP, такой как Tandem HPNS (горизонтальное масштабируемое)?
Теперь позвольте мне пойти глубже:
Я видел во многих местах разработку под MPP (Massively Parallel Processing) с использованием Java, как правило, думают, что если это Java, вы можете использовать все то, что обеспечивает Java (вы знаете, писать один раз где угодно!), В котором многопоточные библиотеки (такие потоки, AKKA, Thread Pools и т. Д.) Могут сильно помочь, увеличив производительность с помощью параллелизма.
Забыв о том факте, что если это MPP, он масштабируется по горизонтали, то есть если вам нужно более быстрое приложение, вы должны спроектировать его так, чтобы оно запускало несколько копий приложения, каждая на отдельном процессоре.
С другой стороны, у нас есть инфраструктура SMP (Symmetric Multi-processing) (здесь у нас есть любые окна, Linux, UNIX-подобные среды), в них вам не нужно беспокоиться об этом, поскольку масштабируемость вертикальная, вы можете иметь больше потоки, в которых их исполнение будет распределяться по различным ядрам, которые есть в ОС (здесь я согласен с использованием многопоточных библиотек).
Итак, имея это в виду, мой вопрос заключается в том, есть ли необходимость в создании приложения, которое будет выполнять большую нагрузку данных с большим количеством проверок и других требований, в которых использование параллелизма поможет значительно улучшить нагрузку время, но оно должно работать в среде MPP (например, Tandem HPNS).
Должен ли разработчик тратить время на добавление многопоточных библиотек, чтобы добавить параллелизм и параллелизм?
Еще пара замечаний:
1) Я не говорю, что SMP лучше или MPP лучше, это просто разные инфраструктуры; моя точка зрения касается только использования многопоточных библиотек в средах MPP, учитывая тот факт, что приложение, использующее многопоточность в MPP, будет использовать только один ЦП из N Cpus, который может иметь Сервер.
2) Я не говорю, что MPP-сервер не поддерживает многопоточные библиотеки, вы можете иметь многопоточность на HPNS, но даже если у вас 20 потоков, нет реального параллелизма, поскольку один поток блокирует другие; если у вас нет распределенного приложения (запущено несколько копий) на разных процессорах.
1 ответ
Нет, я не думаю, что имеет смысл добавлять многопоточную масштабируемость в приложение, которое всегда будет работать в тандеме, потому что тандем не обеспечивает поток на уровне ядра, так что даже если вы пишете многопоточное приложение, это не даст никакой выгоды.
Даже тандем HPNS Java обеспечивает многопоточность в соответствии со спецификацией Java, но его производительность не сопоставима с Linux или любой другой ОС, поддерживающей многопоточность на уровне ядра. Фактическим назначением тандема является доступность HA из-за его аппаратной избыточности.