Erlang vs. Stackless Python
От: Mamut Швеция http://dmitriid.com
Дата: 02.08.07 06:42
Оценка: 6 (3) +1
http://muharem.wordpress.com/2007/07/31/erlang-vs-stackless-python-a-first-benchmark/

На основе задачи из кинги Армстронга:

Write a ring benchmark. Create N processes in a ring. Send a message round the ring M times so that a total of N*M messages get sent. Time how long this takes [..]

Write a similar program in some other programming language you are familiar with. Compare the results. Write a blog, and publish the results on the internet!


В том случае, когд используется IO, Erlang сильно уступает Питону. Когда IO нет, Питон все равно наступает на пятки Эрлангу.

Полное описание, код и графики здесь: http://muharem.wordpress.com/2007/07/31/erlang-vs-stackless-python-a-first-benchmark/


dmitriid.comGitHubLinkedIn
Re: Erlang vs. Stackless Python
От: Gaperton http://gaperton.livejournal.com
Дата: 02.08.07 14:31
Оценка:
Здравствуйте, Mamut, Вы писали:

 18 loop(S, NextP) ->
 19     receive
 20         % the message number is above zero => forward the message to the next
 21         % process in the ring
 22         R when R > 0 -> NextP ! R,
 23             io:format(“: Proc: ~8w, Seq#: ~w, Msg#: ~w ..~n“, [self(), S, R]),
 24             loop(S, NextP);
 25         % the message number is zero => forward message and terminate
 26         R when R =:= 0 -> NextP ! R,
 27             io:format(“* Proc: ~8w, Seq#: ~w, Msg#: terminate!~n“, [self(), S]);
 28         % error: the message number is below zero => raise exception
 29         R when R < 0 ->
 30             erlang:error({“internal error”, “invalid message number”})
 31     end.


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

 18 loop(S, NextP) ->
 19     receive
 26         0 -> NextP ! 0,
 27             io:format(“* Proc: ~8w, Seq#: ~w, Msg#: terminate!~n“, [self(), S]);
 20         % the message number is above zero => forward the message to the next
 21         % process in the ring
 22         R -> NextP ! R,
 23             io:format(“: Proc: ~8w, Seq#: ~w, Msg#: ~w ..~n“, [self(), S, R]),
 24             loop(S, NextP);
 25         % the message number is zero => forward message and terminate
 31     end.


Во вторых, надо убрать io — сейчас все затыкается в него.
Re: Erlang vs. Stackless Python
От: Gaperton http://gaperton.livejournal.com
Дата: 02.08.07 14:51
Оценка: 29 (4) +1
Здравствуйте, Mamut, Вы писали:

И еще. Замерять время старта рантайма — ой как нехрошо. Не могут кривые пересекаться в середине, как это происходит здесь. На самом деле, если вычесть время старта, этот тест показывает нам, что Эрланг примерно в четверо быстрее при передачах сообщений через длинные цепочки — благодаря более совершенному шедулеру, который гонит сообщения волной, и вдвое быстрее при передаче сообщений на коротких цепочках, благодаря более оптимальной реализации посылки сообщения. Если это называется "наступает на пятки" — то конечно . Ну, в два-четыре раза — это не в десять раз, с другой стороны.

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

Плюс — прикольно сравнить, как этот код будет работать на кластере машин. У-упс! Как? Stackless Python так не умеет? Ай-ай-ай . Даже SMP не поддерживает? Какая досада . А что будет, если питоновский процесс у нас упадет? Так какой же python concurrent [language|Эрлангу]?

Re[2]: Erlang vs. Stackless Python
От: FR  
Дата: 04.08.07 09:20
Оценка:
Здравствуйте, Gaperton, Вы писали:


G>Плюс — прикольно сравнить, как этот код будет работать на кластере машин. У-упс! Как? Stackless Python так не умеет? Ай-ай-ай . Даже SMP не поддерживает? Какая досада . А что будет, если питоновский процесс у нас упадет? Так какой же python concurrent [language|Эрлангу]?


В некторых нишах вполне конкурент.
SMP Эрланг тоже очень недавно научился использовать, да и в питоне никто ни мешает место Stackless импользовать самописные потоки на генераторах c использованием нативных потоков OS, да и для кластеров есть решения ( http://pyro.sourceforge.net/ ).
Да и устойчивость к падучести легких потоков будет не хуже эрланговской.
Re[3]: Erlang vs. Stackless Python
От: Cyberax Марс  
Дата: 04.08.07 13:22
Оценка:
FR wrote:
> В некторых нишах вполне конкурент.
> SMP Эрланг тоже очень недавно научился использовать, да и в питоне никто
> ни мешает место Stackless импользовать самописные потоки на генераторах
> c использованием нативных потоков OS, да и для кластеров есть решения (
> http://pyro.sourceforge.net/ ).
В Python на все потоки — общий GC. В Erlang'е оно, скорее всего, из-за
копирования сообщений тормозит.
Posted via RSDN NNTP Server 2.1 beta
Sapienti sat!
Re[4]: Erlang vs. Stackless Python
От: Gaperton http://gaperton.livejournal.com
Дата: 06.08.07 12:11
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>FR wrote:

>> В некторых нишах вполне конкурент.
>> SMP Эрланг тоже очень недавно научился использовать, да и в питоне никто
>> ни мешает место Stackless импользовать самописные потоки на генераторах
>> c использованием нативных потоков OS, да и для кластеров есть решения (
>> http://pyro.sourceforge.net/ ).
C>В Python на все потоки — общий GC. В Erlang'е оно, скорее всего, из-за
C>копирования сообщений тормозит.

В Эрланге "оно" вообще-то не тормозит, "оно" в 2-4 раз быстрее, если не замерять файловый ввод-вывод и время старта рантайма.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.