Какие проблемы способствуют использованию параллельных/параллельных архитектур?
Меня очень волнует возможность использования языков с parallelism/concurrency, таких как stackless python и erlang, и твердо убеждены, что мы все должны двигаться в этом направлении слишком долго - или захотим, потому что это будет хорошим/легким способом достижения масштабируемости и производительности.
Тем не менее, я так привык думать о решениях в линейном/последовательном/ООП/функциональном способе, которым я изо всех сил стараюсь использовать любую из моих проблем в домене таким образом, который заслуживает использования concurrency. Я подозреваю, что мне просто нужно многое отучить, но я подумал, что попрошу следующее:
- Внедрили ли вы что-нибудь разумное в stackless или erlang или другое?
- Почему это был хороший выбор? Это был хороший выбор? Вы сделаете это снова?
- Какие характеристики вашей проблемы означали, что параллельный/параллельный был прав?
- Вы повторно выбрали исключающую проблему, чтобы воспользоваться concurrency/parallelism? и
- если да, то как?
Кто-нибудь из опыта, которым они готовы поделиться?
Ответы
Ответ 1
в прошлом, когда настольные компьютеры имели один процессор, распараллеливание применялось только к "специальному" параллельному оборудованию. Но в наши дни настольные компьютеры обычно имеют от 2 до 8 ядер, поэтому теперь параллельное оборудование является стандартным. Это большая разница, и поэтому речь идет не только о проблемах с предложением parallelism, но и о том, как применить parallelism к более широкому набору проблем, чем раньше.
Чтобы воспользоваться преимуществами parallelism, вам обычно нужно как-то переделать свою проблему. parallelism изменяет игровое поле разными способами:
- Вы получаете проблемы согласованности и блокировки данных. Поэтому вам нужно попытаться организовать свою проблему, чтобы у вас были полунезависимые структуры данных, которые могут обрабатываться различными потоками, процессами и узлами вычислений.
- Parallelism также может ввести недетерминированность в ваши вычисления, если относительный порядок, в котором параллельные компоненты выполняют свои задания, влияет на результаты. Вам может потребоваться защита от этого и определить параллельную версию вашего алгоритма, которая устойчива к различным заказам планирования.
- Когда вы переходите к внутренней материнской плате parallelism и переходите к сетевым/кластерным/сетевым вычислениям, вы также получаете проблемы с пропускной способностью сети, снижением сети и надлежащим управлением сбоями вычислительных узлов. Возможно, вам придется изменить свою проблему, чтобы стало легче справляться с ситуациями, когда часть вычисления теряется при отключении сети node.
Ответ 2
До того, как у нас появились операционные системы, люди, создающие приложения, садились и обсуждали такие вещи, как:
- как мы будем хранить данные на дисках
- какую структуру файловой системы мы будем использовать
- какое оборудование будет работать с нашим приложением
- и т.д.
Операционные системы появились из коллекций "библиотек разработчиков".
Красота операционной системы заключается в том, что ваше программное обеспечение UNWRITTEN имеет определенные характеристики, оно может:
- поговорить с постоянным хранилищем.
- поговорить с сетью
- выполняется в командной строке
- будет использоваться в пакетном режиме
- поговорить с графическим интерфейсом
- и т.д.
Как только вы переместились в операционную систему - вы не вернетесь в status quo ante...
Erlang/OTP (т.е. не Erlang) - это прикладная система - она работает на двух или более компьютерах.
Красота СИСТЕМЫ ПРИМЕНЕНИЯ заключается в том, что ваше программное обеспечение UNWRITTEN имеет определенные характеристики, оно может:
- сбой между двумя машинами
- работать в кластере
- и т.д. и т.д.
Угадайте, что, как только вы переместились в систему приложений, вы не вернетесь ни...
Вам не нужно использовать Erlang/OTP, у Google есть хорошая система приложений в своем движке приложения, поэтому не зацикливайтесь на синтаксисе языка.
Вполне могут быть хорошие бизнес-причины для создания стека Erlang/OTP, а не Google App Engine - ребята из biz dev в вашей фирме сделают этот звонок для вас.
Ответ 3
Проблемы будут оставаться почти такими же, как и в будущем, но основное оборудование для реализации меняется. Чтобы использовать это, способ компиляции между объектами (компонентами, процессами, службами, как вы это называете) изменится. Сообщения будут отправляться асинхронно, не дожидаясь прямого ответа. Вместо этого после выполнения задания процесс вызовет отправителя обратно с ответом. Это как люди, которые работают вместе.
В настоящее время я разрабатываю легковесную архитектуру, основанную на событиях на основе Erlang/OTP. Он назывался Tideland EAS. Я описываю идеи и принципы здесь: http://code.google.com/p/tideland-eas/wiki/IdeasAndPrinciples. Он не готов, но, может быть, вы поймете, что я имею в виду.
MUE
Ответ 4
Эрланг заставляет вас думать о проблеме параллельно. Вы не забудете его на одну секунду. Через некоторое время вы адаптируетесь. Не большая проблема. За исключением того, что решение становится параллельным в каждом маленьком углу. Все остальные языки, которые вы должны настроить. Быть параллельным. И это не кажется естественным. Тогда вы в конечном итоге ненавидите свое решение. Не весело.
Самые большие преимущества Erlang в том, что он не получил глобального сбора мусора. Это никогда не займет перерыва. Это важно, когда у вас 10000 просмотров страниц в секунду.