LINUX.ORG.RU

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

 ,


0

0

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

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

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

> А что мешает отказаться от потоков и написать то же самое на Си с циклами вокруг select()?
А ты попробуй :)

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

>> М-да... я бы не стал доверять свою жизнь проге на динамически типизированном языке :)

>И зря.

Это моя жизнь :)

> Ксати, посчитай на нем факториал 1000.

Зачем? Чтобы увидеть бесконечноточную арифметику? Это не такая уж диковинка.

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

> Там прикол в том, что ошибка возникла в модуле, который к тому времени уже не был нужен. И если бы механизма исключений не было, то ничего бы не произошло

И что? Если бы был обработчик исключения - тоже ничего страшного не случилось бы.

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

>В-третьих, идея интересна (может и не нова), но могли бы её лучше в виде поточно-сигнального модуля к тому же Питону прикрутить, больше бы толку было. Жду "import erlang" в Питоне :-)
http://pythomnic.org/
P.S. Капча darhts

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

Можно сразу написать препроцессор erl-файлов с выхлопом в С. Но мне лень читать про оптимизацию хвостовых рекурсий... Да и времени нет...
Если найду исходники бенчмарка с тредами, возможно что перепишу. Но это уже будет тема для Talks.

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

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

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

И зачем что либо заменять, если все работает? Для красоты? не надо.

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

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

>"А если нужна программа, молотящая в тысячах процессов" - что именно молотящая?

Все, что алгоритмически хорошо паралеллится или распределяется.

>Как выяснили для расчетов Erlang не особо годится.

отлично годится, как супервайзер, как минимум.

>Принять данные с входа и положить в файл/базу, а потом дальше слушать данные?

Хм. Решение одной только этой задачи стоит существования такой платформы/языка.

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

Коннектов на чтение - миллионы, на запись - десятки тысяч + статистика, рейтинги - тоже миллионы на запись.

Есть решение на ПХП?

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

>Коннектов на чтение - миллионы, на запись - десятки тысяч + статистика, рейтинги - тоже миллионы на запись.

Это ты чего такое интересное ваяешь ? :D

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

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

> отлично годится, как супервайзер, как минимум.
И одновременно как максимум

> Есть решение на ПХП?
А почему не bash?

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

>> отлично годится, как супервайзер, как минимум.

> И одновременно как максимум

+1

Erlang - это Occam сегодня :)

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

>Это ты чего такое интересное ваяешь ? :D

неа, это не то, что я ваяю. Это то, на чем я застрял...

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

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

А в чем принципиальная сложность реализации аналогов спецификации JEE на ерланге? :)

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

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

Во первых, это в большинстве своем дорогие задачи. Под них и суперкомпьютеры городят, не то, что языки придумывают...

>> отлично годится, как супервайзер, как минимум. >И одновременно как максимум

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

>> Есть решение на ПХП? >А почему не bash?

ну спрашивали, можно ли заменить ПХП, а не баш...

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

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

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

Ну, я у себя весь контент статический делаю :) А то, что это на PHP делается - дело десятое. Всё равно всё лимитирует производительность lighttpd. Кстати, интересно, как он с yaws соотносится в отдаче статики? На http://www.sics.se/~joe/apachevsyaws.html не посылать, нужно что-то более репрезентативное :D

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

>Ну, я у себя весь контент статический делаю :)

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

>Всё равно всё лимитирует производительность lighttpd.

и далее лимитирует производительность сервера и/или ширина канала.

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

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

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

Есть. Причём несколько вариантов подобного биндинга (mpiJava,JMPI, PJMPI).

Например mpiJava: http://aspen.ucs.indiana.edu/pss/HPJava/mpiJava.html

Только не нужна ибо еще один лисапет ;)

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

> Насчет Erlang'а как первого функционального я не согласен, здесь простота скорее минус, лучше Haskell - поначалу тяжко, зато быстро вправляет мозги в правильном направлении + более полное избавление от императивных костылей.

Я собственно, сам начинал с Haskell'a. После него что Scheme, что Erlang, что oCaml очень просты. Но язык сильно задротский. Я могу по пальцам пересчитать людей, которые возьмутся за его освоение, в страхе не убежав от первых сложностей. Ситуацию усугубляет отсутствие хорошей книги. Вроде бы пишут RealWorld Haskell да и на wikibook-се что-то лежит. Хотя как ФП он лучше. Больше фишек и есть мета-программирование.

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

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

Ещё раз для глухих, для промышленного использования - Ada

Для разминки берём любой compiler http://www.ada-ru.org/soft_bin_compiler.html / http://gnuada.sourceforge.net/ на вкус и проходим по порядку http://www.ada-ru.org/Lovelace/master.htm . Для остальных читаем "талмуд"

Ну ненадо совать ФП в любую дыру, статика всё-равно будет быстрее бегать.

Насчёт ракеты... Хе-хе, чё-то паравоз во франции не падает http://www.sigada.org/education/pages/adainside-tgv.html :0)

Кстати, ещё примерчик, амисы когда решили забомбить багдад ракетами от www.raytheon.com & Co, получилось мимо https://www.indymedia.ie/article/39837 . И что ? Кривыми руками можно всё что хочешь испоганить.

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

>Можно сразу написать препроцессор erl-файлов с выхлопом в С. Но мне лень читать про оптимизацию хвостовых рекурсий... Да и времени нет...

Пытались. Проект загнулся. Потому как "выхлоп" скопилированный получился тормознее, чем Erlang-VM

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

> Пытались. Проект загнулся. Потому как "выхлоп" скопилированный получился тормознее, чем Erlang-VM

Кто пытался? Ссылку можно?

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

> Пытались. Проект загнулся. Потому как "выхлоп" скопилированный получился тормознее, чем Erlang-VM

Неправильно пытались, значит :) Я напишу свой препроцессор, с блэк-джеком и шлюхами! (с)
Но ссылка действительно не помешает.

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

>Неправильно пытались, значит :) Я напишу свой препроцессор, с блэк-джеком и шлюхами! (с)

Ну, что тебе пожелать... Пеши... есчё!:) "блэк-джеком и шлюхами" обизательно палучица!

>Но ссылка действительно не помешает.

Прелогинся, если в гугле забанили.

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

> Ещё раз для глухих, для промышленного использования - Ada

На чем написана операционка и стандартная библиотека в "промышленном использовании"? Тоже на Ada?

> . Хе-хе, чё-то паравоз во франции не падает

Паравозу упасть практически невозможно ;)

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

> На чем написана операционка и стандартная библиотека в "промышленном использовании"? Тоже на Ada?

Бывает и так, бывает и на Си, и на голом железе без ОС.

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

http://citeseer.ist.psu.edu/395040.html

"Gerl is significantly faster for computationally intensive programs such as Takeuchi and Fibonacci, it performs poorly for programs that do significant amount of head-appending to lists such as naive list reversal and quicksort."

Ссылка с исходниками датируется 1998 годом и собственно битая.

Сейчас все знают, что куча есть зло, но видимо в 1998 году этого еще не знали :) Не согласен еще с парой моментов из этого документа, в частности, с отсутствием блэк-джека и шлюх.

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

2sv75 * (*) (05.02.2008 13:55:40):

>На чем написана операционка и стандартная библиотека в
>"промышленном использовании"? Тоже на Ada?

Фича языка Ada заключается в том что наличие OS не является обязательной компонентой для запуска программы на Ada :0)

http://www.ghs.com/products/68k_ada_development2.html

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

> Есть такой pattern в ООП - очередь сообщений. Очень полезно для изоляции потоков. Так что никаких у меня race conditions не может быть просто по определению, всё слишком просто организовано. И никаких блокировок за пределами реализации очереди тоже нет, прикинь.

Чёто при слове "очередь сообщений" мне вспоминается OS/2 ... А сообщения синхронные или асинхронные?

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

AVL2> бесконечно масштабируемая архитектура/алгоритм

AVL2>Дело не в этом. Ограничение будет в голове, в алгоритме, реализующем задачу.

хм.. Месье учил закон Амдала cо следствиями?

http://rsusu1.rnd.runnet.ru/tutor/method/m1/page09_3.html

Не выйдет "бесконечно масштабируемой", без учёта алгоритма задачи. Или алгоритм должен хорошо ложиться на чистую функциональщину

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

про "спорадически возникающие" коммуникаторы и узкие места -- это сильно.. зачем? сами себе ищем race conditions?

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

> Ну ненадо совать ФП в любую дыру, статика всё-равно будет быстрее бегать.

Хм, есть какое-то сравнение с цифрами, выкладками или это на уровне ощущений?

Ленивые вычисления со статической типизацией типа Хиндли-Милнера ВСЕГДА будет медленее? почему?

anonymous
()

Товарищи, распределенные вычисления и многопоточные весьма слабо связаны. Я конечно рад за Эрланг и то что они сделали многопоточность но простите до распредененнх вычислений, грид вычислений и виртуализации им еще идти и идти

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

>Паравозу упасть практически невозможно ;)

Знали бы вы как составляются таблицы движения для этих паровозов:)) Я вон когда-то составлял:)) После этого сидишь и представляешь как хирурги в операционную входят в стерильных комбезах и масках, создается нужная кислородная атсмофера, открывается крышка черепа и начинается операция на мозке.... в этот момент открывается другая дверь и входит тетя Маша, уборщица, в грязных валенках и тряпкой из мешка начинает мыть пол:))

Впрочем в институте нейрохирургии мне тоже побывать довелось - все приблизительно так и выглядит;))

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

>Фича языка Ada заключается в том что наличие OS не является обязательной компонентой для запуска программы на Ada :0)

Охренеть какая уникальная фича ,)
Мы то вот на С и не знали что это - фича и её надо отдельной строкой в фичерЗ лист писать "рэд-болд-италиком"(С) :)


>http://www.ghs.com/products/68k_ada_development2.html

Напомнить тебе когда 68К делать _перестали_ ? Уж лет 10 как ...
А - не! Я счас найду с-bootstrap for Z80 - вот этот зверь до сих пор столько всего рулит по миру что вашей аде .... :)
ЗЫЖ Правда на 80ке с - тоже не уперся - тогда все ещё асм-или :)

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

>>Фича языка Ada заключается в том что наличие OS не является обязательной компонентой для запуска программы на Ada :0)

> Охренеть какая уникальная фича ,) Мы то вот на С и не знали что это - фича

А с каких пор в Си есть встроенная многозадачность? :D

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

> А с каких пор в Си есть встроенная многозадачность? :D

с тех пор, как сам встроишь, и появится :))

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

>> А с каких пор в Си есть встроенная многозадачность? :D

> с тех пор, как сам встроишь, и появится :))

И каким же образом, ламерок, в ЯЗЫК C можно встроить многозадачность?

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

> И каким же образом, ламерок, в ЯЗЫК C можно встроить многозадачность?
fork()
Методы синхронизации разные для разных языков? Я понимаю, что в Эрланге синхронизации и изменения данных не предусмотрено. Но это разве плюс?

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

>fork()

fork() - это не часть ЯЗЫКА. Но тебе-то этого не понять:)

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

> Напомните плиз, что общего у fibers в оффтопике с тасками Эрланга?

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

ЗЫ: тут как-то в сторону распределенных вычислений дискуссия пошла. Но Эрланг под это не точился и для этого не позиционируется. Так что споры вроде MPI vs Erlang абсурдны.

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