LINUX.ORG.RU

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

 ,


0

0

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

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

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

> Одноколёсный лисапеТ ;)

Не совсем.

Это достаточно почтенный проект, проверенный временем. На этом языке конкретно пишут программеры одной конкретной фирмы - рыночного лидера.

Надо отдавать себе отчет в том, что Erlang изначально ортогонален HPC и MPI. Поскольку он функциональный, то он хорошо ложится на "пи-исчисление". Про производительность там рассуждается просто в других терминах. Вообще, он интересен только телекоммуникационщикам.

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

Лисп , Ерланг

до весны еще целый месяц а вы уже активизировались ....

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

>Вообще, он интересен только телекоммуникационщикам.

Это не так, на Эрланге интересно писать и другие программы :) Например, Амазоновская SimpleDB - как раз на Эрланге написана.

Про ejabberd я уж вообще молчу.

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

> ...на Эрланге интересно писать и другие программы :) ...

Конечно!

Пипл, вон, на Жабке HPC вовсю гоняет, а некие орлы на ТеХе интепрератор Васика изобразили!

:-)

Die-Hard ★★★★★
()
Ответ на: комментарий от voidus

> Нечеловеческий какой-то язык...

Вообще-то он на Пролог похож - можно даже диалектом оного обозвать.

Но сейчас, конечно, Пролог мало кто знает.

AlexLorovitch
()

> На этот раз рассматривается создание распределённых (многопоточных) приложений на Erlang.

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

ЗЫ насчет процессов - ктото класно написал на википедии (ага на той самой) про процессы-камикадзе которые падают и поднимаются. естессна что тожесамое можна завернуть юниксовыми сигналами, но в erlang эта фича делается проще удобнее и вообще это часть языка

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

>Вообще-то он на Пролог похож - можно даже диалектом оного обозвать.

Изначально буквально так и было (см. "A History Of Erlang" by Joe Armstrong).

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

> если нужно написать непадающую систему от которой зависит судьба человечества - тут есть только один выбор и это erlang

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

tailgunner ★★★★★
()

хороший язык, хороший поход к реализации/развитию. если не замочат, то это - БУДУЮЩЕЕ ОТРАСЛИ.

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

> ктото класно написал на википедии (ага на той самой) про процессы-камикадзе которые падают и поднимаются.

Кстати, что-то похожее есть в MINIX3 - там это часть ОС

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

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

Есть там типизация (правда, не в буквальнов смысле и необязательная). Но контроль типов и содержимого параметров может быть (и, обычно, так и делают) на порядок жёстче, чем в "модных" языках со статической типизацией.

Led ★★★☆☆
()

Спасибо. Прочитал статью.

Во-первых, слишком замутили то ли с примерами то ли с языком, В функции pong там вообще выглядит как бесконечная рекурсия.

Во-вторых, синтаксис языка немного напрягает. Простейшая мелочь: точки от запятых в конце строк отличать тяжело. Возможно и можно ко всем мелочам привыкнуть. Я сам программировал уже на десятке языков, включая Лисп и Питон.

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

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

> В функции pong там вообще выглядит как бесконечная рекурсия.

У вас комплексы по поводу бесконечной рекурсии? Или человек "уже быдлокодерствовавший на десятке языков, включая лисп" узнать про хвостовую не посчитал нужным?

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

Будущее отрасли - толпа неграмотных школьников с двойками по русскому ;(

captcha: priore

anonymous
()

Ну и чем это лучше MPI?

а в комуникатор можно процессы объединять?
синхронные, асинхронные, по требыванию... всё есть?

а это лучше чем DCOM? callback есть?

p.s. если бы я только дельфи видел, то восхитился бы ;)

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

> Ну и чем это лучше MPI?

> а это лучше чем DCOM? callback есть?

пионер, это _безопасно_ и очень хорошо масштабируется, иди смотри, что такое функциональное программирование. Threaded бенчмарки: http://shootout.alioth.debian.org/debian/fulldata.php?test=threadring&p1=...

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

>Ну и чем это лучше MPI?

Легковесность.

>а в комуникатор можно процессы объединять?

Это что такое?

>синхронные, асинхронные, по требыванию... всё есть?

Есть.

>а это лучше чем DCOM? callback есть?

Есть.

Вообще, для понимания что, зачем, почему и как полезно читать http://www.erlang.org/download/armstrong_thesis_2003.pdf

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

в MPI есть группы и коммуникатор

сообщения можно посылать в пределах коммуникатора всегда есть коммуникатор COMM_WORLD содержащий все процессы и т.д.

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

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

это ничего, что питон появился позже эрланга?

и что питон, это для падучих подделок, а эрланг для создания надежных приложений?

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

>пионер, это _безопасно_ и очень хорошо масштабируется, иди смотри, что такое функциональное программирование.

пионэр, при чём тут функциональное программирование, я про распределённые системы?

p.s. не помню как там у жабы её система распределённого взаимодействия, оно лучше?

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

>сообщения можно посылать в пределах коммуникатора всегда есть коммуникатор COMM_WORLD содержащий все процессы и т.д.

Эммм. Не понял. И что тут такого принципиально важного? Посылка сообщений сразу группе?

Можно с таким же успехом брать и по очереди посылать сообщение нескольким процессам (есть, конечно, тонкости, но не зная задачи их можно опустить).

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

> пионэр, при чём тут функциональное программирование, я про распределённые системы?

при том, что в императивной парадигме писать распределённые приложения геморно.

> p.s. не помню как там у жабы её система распределённого взаимодействия, оно лучше?

http://www.lshift.net/blog/2006/09/10/erlang-processes-vs-java-threads

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

100 сообщений передать поочереди или одно сразу на 100
или 20 одинаковых сообщений в один коммуникатор, 40 в другой

или 50 одной коммандой, при этом каждому процессу посылается по куску вектора, а потом одной коммандой собрать вектор обратно

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

>100 сообщений передать поочереди или одно сразу на 100

У процессов одного коммуникатора общая очередь сообщений или за кулисами оно всё равно раскладывается по 100 очередям?

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

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

реализацию организуют разработчики билиотеки, реализующей MPI

когда я в суе вспомнил DCOM и java, я имел ввиду RMI и CORBA и что-то в этом духе, а не создание до_хрена_потоков на одной машине, ну пусть и с 4 ядрами

функционально или как ещё это не важно.

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

>реализацию организуют разработчики билиотеки, реализующей MPI

НУ вот, в Эрланге так же можно сделать. А что-то -- уже сделано.

>когда я в суе вспомнил DCOM и java, я имел ввиду RMI и CORBA и что-то в этом духе, а не создание до_хрена_потоков на одной машине, ну пусть и с 4 ядрами

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

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

Кроме пролога внешне, еще напоминает внутренне Адавский механизм ранде-ву.

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

> Ну и чем это лучше MPI?

ЕМНИП MPI слишком низкоуровневый. Вручную прописывать все пересылки, топологии, внимательно чтобы клинчей и race conditions не было.. и получатся тяжеловесные процессы

По-моему, у них разные применения. Или низкоуровневая работа с пересылками, топологиями или высокоуровневая с функциями, STM, кешированием на халяву и т. п.

Как-то по ощущениям, низкоуровневый MPI более детерменирован по времени, обработке сообщений итп. Насколько "ленивость" и функциональщина влияет на латентность обработки сообщений (хотя для расчётных задач это как раз неважно) ?

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

> не для дельфи-питон-пхп-руби-шарп-ява нубов...

Да? А я как-то преспокойно писал на яве и занимался эрлангом, в чём фишка? Может проблема в тебе?

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

>> Жду "import erlang" в Питоне :-)

> Это с питоньим то "глобал локом"? LOL!

Потому-то о новом модуле и написал, дабы т.н. "функциональность" Эрланга добавить. Или как связать существующие программы на Питоне с Эрлангом?

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

> это ничего, что питон появился позже эрланга?

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

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

> и что питон, это для падучих подделок, а эрланг для создания надежных приложений?

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

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

> Мои "поделки" на Питоне почему-то никогда не падали, а сетевые приложения на нём годами без перезапуска и под нагрузкой в области телекомов работают. Не осилили Питон?

питон сложно не осилить, но надо сказать прямо: поделки на нём и вправду падучи. Статическая типизация по нём плачет.

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

2anonymous (*) (03.02.2008 3:39:43):
>но если нужно написать непадающую систему от которой зависит судьба
>человечества - тут есть только один выбор и это erlang

Для этого был создан язык Ada, эланг курит в сторонке...

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

>внимательно чтобы клинчей

а на Erlang как не напиши клинчей не бывает???

волшебство или вещества?

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

> Мои "поделки" на Питоне почему-то никогда не падали, а сетевые приложения на нём годами без перезапуска и под нагрузкой в области телекомов работают. Не осилили Питон?

Опрос по snmp чуть более 1000 железок: non-thread: порядка 4 минут

thread: python (pysnmp) - 50 сек (и более 15 потоков уже не имеет смысла - GIL одноко), что pool, что не pool.

thread: ruby (snmplib) - 30 сек

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

>> В функции pong там вообще выглядит как бесконечная рекурсия.

> У вас комплексы по поводу бесконечной рекурсии? Да. Вырос на принципах классического программирования 10-15 лет давности.

> Или человек "уже быдлокодерствовавший на десятке языков, включая лисп" узнать про хвостовую не посчитал нужным?

Грубиян! Изучаю с удовольствием всё новое, что мне ещё не известно.

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

> Опрос по snmp...

Вы говорите о конкретной библиотеке, а не о языке в целом. Библиотеки можно переключать. Я, например, PyXML редко использую, только для тестов, а так в основном внешний lxml подключаю. Я и не пишу систему 100% на Питоне, C++ отлично мне помогает.

Питон же - отличный язык для прототипизации и тестов. Системы на нём отлично работают и развиваются, по мере роста нагрузки можно либо новые серваки ставить или модули в C++ экспортировать (зависит от того что дороже, железо или программисты). Совершенную систему с нуля написать - эти легенды для студентов оставьте.

Возможности Эрланга мне интересны пока в теории. Питон со всем этим в моём случае справляется (телеком, пару сотен клиентов в секунду). Падения системы за несколько лет не переживали.

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

> Это с питоньим то "глобал локом"? LOL!

1. Есть возможность его обходить.
2. Я использую внешние модули которые сами по себе нужную функциональность реализуют.

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

>Про ejabberd я уж вообще молчу.

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

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

>Есть же stackless? На нём, как-никак, EVE крутится.

Они уже решили проблемы с блобварами? :)

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

>зря. я вот пытаюсь кластер этого безобразия эксплуатировать. две ноды, так раз или два в день обязательно кластер разваливается...

Руки?

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

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

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

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