LINUX.ORG.RU

Вышел Erlang R11B


0

0

Компания Ericsson выпустила новый релиз открытого функционального языка программирования. Основное новшество - поддержка SMP. Также были введены некоторые дополнения в синтаксис и исправлено множество ошибок.

Если Вы в данный момент делаете выбор языка программирования для серверного приложения, то крайне рекоммендуется обратить свой взор на Erlang, так как:

* Erlang не использует треды OS. Напротив, он имеет собственную реализацию легковесных потоков (aka erlang process).
* Эффективное взаимодействие между процессами, с помощью которого, в частности, можно решить многие проблемы блокировок.
* Нативная кластеризация.
* Поддержка обновления кода приложения "налету".
* Базовые фреймворки сетевых приложений: сервер, конечный автомат, иерархия процессов и тд.
* Простота синтаксиса и отсутствие side-эффектов.

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

★★★

Проверено: Shaman007 ()

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

> Думаю после этой pdf'ки можно завершить дискуссию..

Я, как бы не нашёл там ничего для себя нового... :)

> Доступное объяснение кто такие потоки, процессы и волокна...

А я это читал. Более того, опять возвращает нас к:

"Generally, this is not done because threads are cheap, easy, and well-implemented in modern operating systems." (В основном так не поступают, поскольку потоки сейчас дёшевы, просты и хорошо реализованы на современных операционных системах.)

В тоже время "Typically fibers are implemented entirely in userspace." Т.е. то, что я и говорил.

И здесь опять дилема - или ошиблись авторы Erlang и реализация собственных потоков (в userspace, в данном случае - аналог fiber) была ошибочной и излишней или непонятно, почему все не используют активно этот приём.

atrus ★★★★★
()

Ау!! Эдесь есть программеры или одни мудаки называющиеся себя ситемными администраторами?

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

Ыыыыыхххх...

>> В тоже время "Typically fibers are implemented entirely in userspace." Т.е. то, что я и говорил.

и чуть выше

>> Fibers - и есть аналог userspace-___потоков___

Я это что ли говорил?

>> "______Generally______, this is not done because threads are cheap, easy, and well-implemented in modern operating systems." (В основном так не поступают, поскольку потоки сейчас дёшевы, просты и хорошо реализованы на современных операционных системах.)

А тут что не понятно?

Там написано "Обычно". А товарисчи и эриксона - не обычные. Они посчитали неэффективными текущие реализации потоков в ОС и решили сделать свою.

Насколько у них это хорошо получилось, я судить не буду, т.к. с ерланг дела не имел.

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

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

Ну и пусть с ними. Тем более, что я пока порылся в исходниках wine, думаю и на моей улице празник будет... :)

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

>>Ну и пусть с ними. Тем более, что я пока порылся в исходниках wine, думаю и на моей улице празник будет... :)

Может пригодится :)

http://www.sics.se/~adam/pt/

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

> И здесь опять дилема - или ошиблись авторы Erlang и реализация собственных потоков (в userspace, в данном случае - аналог fiber) была ошибочной и излишней или непонятно, почему все не используют активно этот приём.

Всё дело в том, что одной реализации лёгких процессов недостаточно. Как правило после этого авторы упираются во взаимодействие процессов, и часто делают это с помощью разделяемой памяти, со всеми вытекающими проблемами. Иногда делают это с помощью "каналов", но по-видимому наиболее удобный метод сделали в erlang.

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

>никогда не понимал, почему не использование тредов ОС является плюсом системы.

>если нативные треды не удовлетворяют, то может это повод допилить их, а не изобретать велосипеды?

Простейший пример именно с Jabber.ru

Jabber просто делать в виде один юзер = один тред.

На сервере сидит 15 тыс. юзеров.

Какая ОС потянет 15 тыс. нативных тредов?

...

А так - это просто идеология Erlang: "Всё есть процесс".

KRoN73 ★★★★★
()

Кто-нибудь может объяснить столь низкие результаты у erlang'a на shootout.alioth.debian.org ?

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

> Кто-нибудь может объяснить столь низкие результаты у erlang'a на shootout.alioth.debian.org ?

Потому что erlang не для перемножения матриц создавался. К слову, загрузка процессора на jabber.ru практически нулевая, и даже если нагрузить его трафиком, большая часть процессорного времени будет расходоваться в системных вызовах read/write.

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

х.з., что там на jabber.ru, а у меня вот так...

Mem: 1554080k total, 1493316k used, 60764k free, 173696k buffers Swap: 987988k total, 0k used, 987988k free, 356180k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 5759 ejabberd 15 0 403m 351m 2456 S 0.0 23.2 3:10.28 beam

Онлайн около 50 юзеров. Вроде бы, многовато для них 350 метров, с другой стороны, память нынче дешевая, в отличие от Атлонов Х2 :)

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

> Какая ОС потянет 15 тыс. нативных тредов?

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

С третьей стороны, рассказки про 400k потоков/процессов Erlang - тоже надо понимать правильно. Если они все работают, то о малом времени отклика отдельного потока можно будет забыть. :)

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

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

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

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

> Какая ОС потянет 15 тыс. нативных тредов?

Linux :) При разработке NPTL один из тестов, которые использовал Ingo Molnar, было создание то ли 100, то 200 тысяч нитей. И ничего, работало :)

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

> При разработке NPTL один из тестов, которые использовал Ingo Molnar, было создание то ли 100, то 200 тысяч нитей. И ничего, работало :)

Даже NPTL-треды не могут сравниться по скорости и занимаемой памяти с процессами Erlang'а.

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

>> При разработке NPTL один из тестов, которые использовал Ingo Molnar, было создание то ли 100, то 200 тысяч нитей. И ничего, работало :)

> Даже NPTL-треды не могут сравниться по скорости и занимаемой памяти с процессами Erlang'а.

Вопрос-то был про систему. Кстати, кто и как сравнивал скорость/эффективность?

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

> Эдесь есть программеры или одни мудаки называющиеся себя ситемными

> администраторами?

Гладких, старая пердячая истеричка, ты чтоли? :-)

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

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

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

Jabberd2, сейчас 50 юзверей, вечерами доходит до 150, не вижу такое
кол-во тредов, используется ядро 2.4 БЕЗ ntpl, процессор Cel 800,
SDRAM 256, на этой же машинке web, mail, dns, pptpd (одновременно
около 30 сессий, 2-3 гига в день, заголовки всех проходящих пакетов
пишутся в БД mysql на этой же машинке) вот что даёт команда:

ps axum | grep jabberd

jabberd 32249 0.5 1.2 16704 6424 ? S Apr01 413:15 /usr/local/jabberd/bin/router -c /usr/local/jabberd/etc/jabberd/router.xml
jabberd 32252 0.0 0.2 4376 1156 ? S Apr01 0:10 /usr/local/jabberd/bin/resolver -c /usr/local/jabberd/etc/jabberd/resolver.xml
jabberd 32253 1.6 7.5 45544 39128 ? S Apr01 1220:40 /usr/local/jabberd/bin/sm -c /usr/local/jabberd/etc/jabberd/sm.xml
jabberd 32256 0.0 1.3 14312 7144 ? S Apr01 5:56 /usr/local/jabberd/bin/s2s -c /usr/local/jabberd/etc/jabberd/s2s.xml
jabberd 32257 0.5 2.2 26348 11464 ? S Apr01 427:40 /usr/local/jabberd/bin/c2s -c /usr/local/jabberd/etc/jabberd/c2s.xml
jabberd 32260 0.0 1.4 30344 7432 ? S Apr01 0:06 /usr/local/jabberd/bin/muc -c /usr/local/jabberd/etc/jabberd/muc.xml
jabberd 32261 0.0 1.4 30344 7432 ? S Apr01 0:00 /usr/local/jabberd/bin/muc -c /usr/local/jabberd/etc/jabberd/muc.xml
jabberd 32262 0.0 1.4 30344 7432 ? S Apr01 0:06 /usr/local/jabberd/bin/muc -c /usr/local/jabberd/etc/jabberd/muc.xml
jabberd 32264 0.0 1.2 16576 6488 ? S Apr01 10:26 /usr/bin/perl /usr/local/jabberd/bin/ua -c /usr/local/jabberd/etc/jabberd/ua.xml
jabberd 32265 0.0 2.8 123076 14912 ? S Apr01 0:00 /usr/local/jabberd/bin/jit -c /usr/local/jabberd/etc/jabberd/jit.xml
jabberd 32266 0.0 2.8 123076 14912 ? S Apr01 0:08 /usr/local/jabberd/bin/jit -c /usr/local/jabberd/etc/jabberd/jit.xml
jabberd 32267 0.0 2.8 123076 14912 ? S Apr01 0:16 /usr/local/jabberd/bin/jit -c /usr/local/jabberd/etc/jabberd/jit.xml
jabberd 32268 0.0 2.8 123076 14912 ? S Apr01 16:13 /usr/local/jabberd/bin/jit -c /usr/local/jabberd/etc/jabberd/jit.xml
jabberd 32269 0.0 2.8 123076 14912 ? S Apr01 3:06 /usr/local/jabberd/bin/jit -c /usr/local/jabberd/etc/jabberd/jit.xml
jabberd 32270 0.0 2.8 123076 14912 ? S Apr01 3:26 /usr/local/jabberd/bin/jit -c /usr/local/jabberd/etc/jabberd/jit.xml
jabberd 32271 0.0 2.8 123076 14912 ? S Apr01 3:08 /usr/local/jabberd/bin/jit -c /usr/local/jabberd/etc/jabberd/jit.xml
jabberd 32272 0.0 2.8 123076 14912 ? S Apr01 3:09 /usr/local/jabberd/bin/jit -c /usr/local/jabberd/etc/jabberd/jit.xml
jabberd 32273 0.0 2.8 123076 14912 ? S Apr01 3:03 /usr/local/jabberd/bin/jit -c /usr/local/jabberd/etc/jabberd/jit.xml
jabberd 32274 0.0 2.8 123076 14912 ? S Apr01 2:54 /usr/local/jabberd/bin/jit -c /usr/local/jabberd/etc/jabberd/jit.xml
jabberd 32275 0.0 2.8 123076 14912 ? S Apr01 3:01 /usr/local/jabberd/bin/jit -c /usr/local/jabberd/etc/jabberd/jit.xml
jabberd 32276 0.0 2.8 123076 14912 ? S Apr01 2:56 /usr/local/jabberd/bin/jit -c /usr/local/jabberd/etc/jabberd/jit.xml
jabberd 32277 0.0 2.8 123076 14912 ? S Apr01 2:41 /usr/local/jabberd/bin/jit -c /usr/local/jabberd/etc/jabberd/jit.xml
jabberd 32278 0.0 2.8 123076 14912 ? S Apr01 2:45 /usr/local/jabberd/bin/jit -c /usr/local/jabberd/etc/jabberd/jit.xml

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

Заголовки не локальной сети конечно пишутся, а пакетов из интернета, 2-3 гига в день, это инетовский трафик...

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

Ну дык это ж процессы ОС, а не Эрланга. В каждом процессе ОС могуть быть сотни Эрланговских процессов.

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

оп-па, неужто джонник и на лор захажывает?

anonymous
()

Хороший камент на LtU: "Most Erlang success stories begin with huge, multi-year, multi-million line C++ failure stories."

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

>Ну дык это ж процессы ОС, а не Эрланга. В каждом процессе ОС могуть быть сотни Эрланговских процессов.

Так jabberd ерланг и не юзает... Хотелось показать, что можно и одним процесом обойтись для обслуживания большого кол-ва пользователей, без всякого ерланга.

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

А, это jabberd. Я не понял заморочки :)

Не вопрос, что можно. Но pdf-ку все-таки прочитай. Повторю: мне ключевым моментом показалась именно обработка ошибок. То, как она возможна при Эранговском подходе.

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

> вечерами доходит до 150.

Хехе. На jabber.ru симулировалась нагрузка 200k (можно было и больше, но postgresql сожрал все ресурсы). Jabberd'у такое и не снилось.

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

%% benchmark.erl
-module(benchmark).
-export([process/0,init/0]).

process() ->
        receive
                _ -> ok
        end.

init() ->
        lists:foreach(
                fun(_) -> spawn(?MODULE, process, []) end,
                lists:seq(1,500000)
        ).

$ erl +P 520000 -s benchmark init
$ top
...
PID   USER        PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
13420 zenith      16   0  623m 433m  612 S  0.0 86.2   0:03.60 beam
...

PS. Sempron-3100+/512Mb.
PS. Никто не хочет запустить 500k тредов? :)

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