LINUX.ORG.RU

Распределённые приложения на Erlang

 ,


0

0

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

>>> Подробности

Ответ на: комментарий от sv75

> А кто как не ты обосрал всех заявляющих об ортогональности MPI и Erlang? А теперь - копытами назад?

Да ты оказывается фонатег ;)

Еще раз и по буквам - речь про _парадигму_параллелизма_ коя в субже весmма похожа на MPI но по фичам ImHO беднее.

>А, вы просто троль, так бы рсразу и сказали.

Тролль как раз вы. Но я сегодня добрый - на иди читай https://computing.llnl.gov/tutorials/mpi/

sS ★★★★★
()
Ответ на: комментарий от sS

> _Сделать_ и иметь _готовую_ сущность (мегаэффективную и отлаженную) это две большие разницы.

Может ли быть мегаэффективная (+надежная) групповая рассылка вне кластеров? Разработчики Ерланга ответили отрицательно.

sv75 ★★★★★
()
Ответ на: комментарий от sS

> Еще раз и по буквам - речь про _парадигму_параллелизма_ коя в субже весmма похожа на MPI но по фичам ImHO беднее.

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

> Но я сегодня добрый - на иди читай https://computing.llnl.gov/tutorials/mpi/

Я знаком с MPI на уровне данного туториала. распределенных реруляционных БД там нету.

Кстати, чего это ты расттыкался и раскомандовался, кому куда идти? Я тоже могу послать тебя читать маны по ерлангу, тебе оно явно не помешает.

sv75 ★★★★★
()
Ответ на: комментарий от sS

>hint: речь идёт о парадигме _параллелизма_ а не о поисках "серебряной пули". Лично мне парадигма паралеллизма в субже видится весьма убогой (по сравнению с MPI). Другой вопрос что для набора решаемых оным задач этого достаточно.

Они разные. MPI хорош там, где есть небольшое количество относительно жирных процессов, которым в отдельные моменты времени необходимо друг другу что-то сообщить. Соответственно, имеем подвинутые семафоры, локи и рассылку сообщений.

А в эрланге парадигма совершенно иная. Небольшие процессы создаются сотнями и тысячами. Каждый процесс делает свое маленькое дело, порождает другие процессы, а в случае чего умирает.

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

В Эрланге это просто, потому что параллелизм в нем находится в центре всего, соответственно он прост и функционален.

AVL2 ★★★★★
()
Ответ на: комментарий от sv75

>Речь идет о том, что ерланг - не для параллельных числодробилок.

Спорное утверждение. Хотя, конечно, все, что не фортран - не для вычислений, да уже и в c++ эффективных библиотек достаточно, сама задача , например, вычислений методом конечных элементов очень хорошо подходит для эрланга...

Настран (c++,fortran,mpi), к примеру, доказывает это со всей очевидностью, умирая по любому поводу и выдавая тольео конечный результат, то есть, все или ничего.

AVL2 ★★★★★
()
Ответ на: комментарий от sS

> распределенных реруляционных БД там нету.

> Это часть _языка_ ? o_O

Поскольку оная БД поддерживается самой средой исполнения ерланга - вполне можно сказать "да". Если под "языком" понимать базовый синтаксис - то "нет", это часть стандартоной библиотеки.

sv75 ★★★★★
()
Ответ на: комментарий от sS

>ЗЫ: Эрланг живёт на кластерах ? Можно по идее проверить. 176 Гигов оперативы есть ;)

Дык надо ж осмысленно проверять, на какой-нибудь простой задачке. Что толку хоть с миллиона спящих процессов?

WFrag ★★★★
()
Ответ на: комментарий от AVL2

> Спорное утверждение.

Я помню, что все целый числа там бесконечнодлинные, мне страшно полдумать про вещественные :)

> сама задача , например, вычислений методом конечных элементов очень хорошо подходит для эрланга...

Задач, подходящих под его парадигму - в теории да, навалом, массы дискретных алгоритмов.

sv75 ★★★★★
()
Ответ на: комментарий от AVL2

>например, вычислений методом конечных элементов очень хорошо подходит для эрланга...

Для даной парадигмы в принципе подходит и всякие методы Монте-Карло и решение задач по расчёту траекторий в многофазных системах, но там критическим является ресурсы процессора. То есть породить миллион процессов можно но это будет неэффективно если у вас всего 1000 процессорных ядер, поэтому там парадигма чуть отличается ...

sS ★★★★★
()
Ответ на: комментарий от sS

>Вот это пожалуй существенное отличие в парадигме ...

Ага, небось екнуло в этом месте? ;)

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

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

>Ага, небось екнуло в этом месте? ;)

> А оно именно так и работает. Смерть процесса - вещь абсолютно естественная, к тому же приводящая к смерти тех процессов, которые из за этого теряют смысл своего существования.

Только в пределах одного коммуникатора...

sS ★★★★★
()
Ответ на: комментарий от sS

>но там критическим является ресурсы процессора.

процессы, порождаемые эрлангом минимально связаны. минимум семафоров, минимум локов. Фактически, это управляемое данными вычисление и лучше всего оно пойдет на соответствующем процессоре.

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

AVL2 ★★★★★
()
Ответ на: комментарий от sv75

>Я помню, что все целый числа там бесконечнодлинные, мне страшно полдумать про вещественные :)

Нет. Считать на эрланге не надо. Это просто невозможно за неимением библиотек. Единственный вариант, это оборачивать фортрановые и сишные либы, чтобы иметь возможность внутри функции/процесса эрланга оперировать векторами, матрицами и т.д.

AVL2 ★★★★★
()
Ответ на: комментарий от sS

>Можно по идее проверить. 176 Гигов оперативы есть ;)

Этого недостаточно. Эту "оперативу" в голове неплохо бы чем-то полезным наполнить, перед тем как что-то "пробовать".

Led ★★★☆☆
()
Ответ на: комментарий от sS

>Только в пределах одного коммуникатора...

Это искусственное ограничение. Так бесконечно масштабируемое приложение не построить...

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

>процессы, порождаемые эрлангом минимально связаны. минимум семафоров, минимум локов.

Это как раз сужает область применения. Как и отсутствие групповых операций и коммуникаторов, опять же ассортимент p-p операций невелик (мягко говоря). Это конечно можно сэмулировать, но это уже будет лишняя сущность пристроенная сверху(сбоку/сзади)

sS ★★★★★
()
Ответ на: комментарий от Led

>Этого недостаточно. Эту "оперативу" в голове неплохо бы чем-то полезным наполнить, перед тем как что-то "пробовать".

То есть реальных задач для erlang под такие ресурсы нет ? ;)

sS ★★★★★
()
Ответ на: комментарий от AVL2

>Это искусственное ограничение. Так бесконечно масштабируемое приложение не построить...

Чесно говоря не помню есть ли ограничение на число коммуникаторов ;)

Задача же на натянуть одну парадигму на другую а сравнить плюсы и минусы ну и просто различия

sS ★★★★★
()
Ответ на: комментарий от sS

> Задача же на натянуть одну парадигму на другую а сравнить плюсы и минусы ну и просто различия

MPI для математики, OTP для масштабируемых серверных задач, чего непонятно то.

anonymous
()
Ответ на: комментарий от anonymous

> MPI для математики, OTP для масштабируемых серверных задач, чего непонятно то.

Реализации - да.

sS ★★★★★
()

Еще интересный момент - атомы.

Я вот никогда не понимал, почему я могу без дополнительных усилий ограничить аргумент функции,скажем, только целым или только положительным, но не могу ограничить его списком валидных значений?

Вот есть у меня функция-логарифм, который у меня в программе бывает только натуральный или десятичный. В эрланге я пишу функцию

log (E,x) -> ...; log (10,x) -> ....

и все,вызов функции с другим параметром не пройдет незамеченым, а в других языках по любому будут или две разные функции с разными типами данных и либо везде четко отделяй lg() и ln() или молись, что компилятор везде вызовет верную функцию, то есть кастуй аргумент, но при этом все равно в аргумент может попасть и 9 и 0 и что угодно...

AVL2 ★★★★★
()
Ответ на: комментарий от sS

>Это конечно можно сэмулировать,

Не надо эмулировать. Надо менять направление мысли.

Я допускаю, что каки-то задачи нельзя красиво решить в эрланге. Навскидку, это все, что сильно цепляется по данным друг за друга, то есть, в принципе плохо параллелится.

Такие задачи надо просто решать другими средствами. А эмулировать - не надо.

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

> Нет. Считать на эрланге не надо. Это просто невозможно за неимением библиотек.

Библиотеки нужны непрерывщикам. :) Вот есть к примеру простая такая задача - генерация всего графа состояний программы на некотором языке. :)

sv75 ★★★★★
()
Ответ на: комментарий от sS

>Чесно говоря не помню есть ли ограничение на число коммуникаторов ;)

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

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

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

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

sS ★★★★★
()

ну привычка писать на одном - формирует "туннельное зрение". и все необычное - видится "в штыки. но если(ЕСЛИ !!!) вдуматься, метафора помойки(heap), диспетчиризация вообще(мьютексы или еще как) - ОЧЕНЬ, ОЧЕНЬ нездоровая фигня. повторюсь, это будующее.

anonymous
()
Ответ на: комментарий от AVL2

1. голословно 2. на других языках - пишут. а тут - "то что доктор прописал".

anonymous
()
Ответ на: комментарий от AVL2

> Эрланг, это и есть очередь сообщений. Там по другому быть не может.

Ну и зачем он нужен, когда и в Java эта очередь распрекрасненько реализуется?

anonymous
()
Ответ на: комментарий от anonymous

>Ну и зачем он нужен, когда и в Java эта очередь распрекрасненько реализуется?

"Понмаешь, сынок, эсть такое понятие - родина!" (с) Анекдот

Led ★★★☆☆
()
Ответ на: комментарий от anonymous

> Эрланг, это и есть очередь сообщений. Там по другому быть не может.

> Ну и зачем он нужен, когда и в Java эта очередь распрекрасненько реализуется?

Я бы перефразировал - зачем нужна Java, если это прекрасно реализуется в Erlang "из коробки"?

sv75 ★★★★★
()
Ответ на: комментарий от anonymous

>Видно, что Scala на Java 6.0 не сильно-то от Эрланга отстает

Да, всего в 10 раз:)

Led ★★★☆☆
()
Ответ на: комментарий от anonymous

учитывая молодость языка и количество "заточек" под железо у EJB-related и в других нишах - разница(в пользу Erlang) - будет только РАСТИ. но, повторюсь, если его - не замочат.

anonymous
()
Ответ на: комментарий от sv75

В Erlang эти очереди есть из коробки, и ничего кроме них и нет. А в Java есть всё, что может вообще в жизни понадобиться.

anonymous
()
Ответ на: комментарий от anonymous

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

посему считаю, что в языке главное - универсальность. если он такой весь из себя узконаправленный - значит пусть предоставляет богатые возможности взаимодействия с другими языками, дабы можно было на нем писать только ту часть кода, которую реально написать на нем легче.. а проектов, которые ТОЛЬКО тем и занимаются, что используют сильные стороны узкоспециализированного языка - по определению мало.

anonymous
()
Ответ на: комментарий от anonymous

MPI под java есть? нету... на хер

надоели унылые жабофилы :(

p.s. жаба она, как журналисты... трындёж один

anonymous
()
Ответ на: комментарий от anonymous

> В Erlang эти очереди есть из коробки, и ничего кроме них и нет. А в Java есть всё, что может вообще в жизни понадобиться.

Вот мне нужны биндинги к SDL. Живые биндинги к SDL в Java есть? Судя по гугдению и apt-cache - нет. А, все пропало, ява не на что не годится.... ;)

sv75 ★★★★★
()
Ответ на: комментарий от anonymous

любовь к новому отвалится и останется "старое доброе" - реинкарнации пролога и процедурных - в Эрланге. Java и C++(как и C) - уже "отвалились" а любовь(:-) - осталась ;P

anonymous
()
Ответ на: комментарий от anonymous

>А в Java есть всё, что может вообще в жизни понадобиться.

Дай живые биндинги к Ogre3D или Irrlicht, очень благодарен буду! :)

KRoN73 ★★★★★
()
Ответ на: комментарий от anonymous

>Ну и зачем он нужен, когда и в Java эта очередь распрекрасненько реализуется?

Если нужна эта очередь, то да, можно и яву и питон и что угодно использовать. А если нужна программа, молотящая в тысячах процессов, а не тупо жрущая, память как ява или висящая в случайных тредах, как питон, то нужен спец инструмент. И имя ему - эрланг...

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

2AVL2
"А если нужна программа, молотящая в тысячах процессов" - что именно молотящая?
Как выяснили для расчетов Erlang не особо годится. Что эти тысяча процессов могут делать?
Принять данные с входа и положить в файл/базу, а потом дальше слушать данные?

Korwin ★★★
()
Ответ на: комментарий от Korwin

> SMTP и прочие почтовые SPAM-фильтры тоже на Erlang?

Ты не поверишь :D Есть у меня острое желание (но пока беда со временем) написать SMTP proxy, который бы держал 100-200K concurent connection's и вышибал SMTP time из потока 50-70% спама + routing/balancing по backend'ам. Вот тебе типичная телекомовская задача и прямая дорога к использованию erlang'a. :D

>HTTP - смешно :), PHP, Perl, Java J2EE , .NET - все это заменит?

Ну почему же ? CMS на erlang'e, конечно, выглядит большим извращением, а вот какой-нибудь сильно нагруженный REST - самое оно :D Не ?

Alter ★★
()
Ответ на: комментарий от Korwin

>А то, что Apache имеет функционал на порядки богаче чем YAWS это так, мелочь :)

Да, полностью согласен. Я, собственно, и не говорил, что erlang - "серебрянная пуля".

Alter ★★
()
Ответ на: комментарий от Alter

> а вот какой-нибудь сильно нагруженный REST - самое оно :D Не ?
Похоже да.
Erlang - получается узкоспециализированным. Соответственно специалистов (и литературы) по нему мало.

Жаль сейчас не вижу подходящих задач для него. Пока Objective-C поизучаю.

Korwin ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.