Главное, на что следует обратить внимание при переходе от многопоточных к распределенным вычислениям, - это увеличение накладных расходов, связанных с буферизацией заданий на удаленных машинах, по сравнению с буферизацией другого потока на текущей машине. Степень детализации рабочих элементов должна быть достаточно большой, чтобы оправдать значительно более медленную связь между узлами - обмен сообщениями между потоками на одном компьютере на много порядков быстрее, чем обмен сообщениями между различными компьютерами по сети.
Совместное использование ресурсов сложнее на разных машинах. Совместное использование объектов в памяти является простым в нескольких потоках в одном и том же процессе, но требует некоторой разработки для достижения аналогичных результатов на разных машинах. Замки в основном не существуют на машинах. Обратите внимание на использование службы / сервера очереди сообщений для координации работы между несколькими компьютерами, возврата результатов в агрегатор и т. Д.
Вы упоминаете "в помещениях против помещений". Если вы рассматриваете ресурсы для локальных вычислений, обязательно поищите поставщиков услуг облачных вычислений или эластичных вычислений. Как ни странно, они не используются на одном дыхании с параллельным программированием так часто, как вы думаете. Облачные вычисления предлагают вам возможность увеличить параллелизм до сотен или тысяч вычислительных узлов, за которые вы платите только во время их использования. Когда ваши вычисления завершены или источник данных для анализа отправляется домой в конце дня, вы можете «отключить» свои облачные узлы и остановить часы выставления счетов, пока не запустите их снова.
Amazon, Google и Microsoft являются тремя крупными поставщиками облачных услуг (среди прочих), и каждый из них имеет свои особенности, сильные и слабые стороны. Я работаю над материалом Azure в Microsoft. Встроенные очереди сообщений Azure довольно удобны для запуска рабочих процессов производителя / потребителя в масштабе.
Независимо от того, используете ли вы LAMP или .NET в качестве своей платформы, на самом деле не столько вопросы производительности, сколько инструменты и наборы навыков, которые есть в вашей команде разработчиков. Преднамеренный выбор целевой платформы, которая не соответствует набору навыков вашей команды разработчиков, - это отличный способ добавить много времени и затрат на переподготовку к расписанию вашего проекта.
C # / .NET очень хорошо работает для кодирования параллельных систем по сравнению с C ++ или сценариями в других средах. Учитывайте языковые возможности, средства отладки и готовые библиотеки и службы, доступные вам, при оценке того, какая платформа лучше всего подходит для вашего набора навыков и желаемого дизайна системы.