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/
Здравствуйте, 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 — сейчас все затыкается в него.
Здравствуйте, Mamut, Вы писали:
И еще. Замерять время старта рантайма — ой как нехрошо. Не могут кривые пересекаться в середине, как это происходит здесь. На самом деле, если вычесть время старта, этот тест показывает нам, что Эрланг примерно в четверо быстрее при передачах сообщений через длинные цепочки — благодаря более совершенному шедулеру, который гонит сообщения волной, и вдвое быстрее при передаче сообщений на коротких цепочках, благодаря более оптимальной реализации посылки сообщения. Если это называется "наступает на пятки" — то конечно
. Ну, в два-четыре раза — это не в десять раз, с другой стороны.
Разница, правда, станет существенно более впечатляющей, когда мы начнем паттерн-матчинг на мэйлбоксе применять. Ну, то есть когда возникнет необходимость более-менее сложный протокол реализовать, а не гонять сообщения по кругу. Вот тут-то самое интересное и начнется.
Плюс — прикольно сравнить, как этот код будет работать на кластере машин. У-упс! Как? Stackless Python так не умеет? Ай-ай-ай
. Даже SMP не поддерживает? Какая досада
. А что будет, если питоновский процесс у нас упадет? Так какой же python concurrent [language|Эрлангу]?
Здравствуйте, Gaperton, Вы писали:
G>Плюс — прикольно сравнить, как этот код будет работать на кластере машин. У-упс! Как? Stackless Python так не умеет? Ай-ай-ай . Даже SMP не поддерживает? Какая досада . А что будет, если питоновский процесс у нас упадет? Так какой же python concurrent [language|Эрлангу]?
В некторых нишах вполне конкурент.
SMP Эрланг тоже очень недавно научился использовать, да и в питоне никто ни мешает место Stackless импользовать самописные потоки на генераторах c использованием нативных потоков OS, да и для кластеров есть решения (
http://pyro.sourceforge.net/ ).
Да и устойчивость к падучести легких потоков будет не хуже эрланговской.
FR wrote:
> В некторых нишах вполне конкурент.
> SMP Эрланг тоже очень недавно научился использовать, да и в питоне никто
> ни мешает место Stackless импользовать самописные потоки на генераторах
> c использованием нативных потоков OS, да и для кластеров есть решения (
> http://pyro.sourceforge.net/ ).
В Python на все потоки — общий GC. В Erlang'е оно, скорее всего, из-за
копирования сообщений тормозит.
Posted via RSDN NNTP Server 2.1 beta
Здравствуйте, Cyberax, Вы писали:
C>FR wrote:
>> В некторых нишах вполне конкурент.
>> SMP Эрланг тоже очень недавно научился использовать, да и в питоне никто
>> ни мешает место Stackless импользовать самописные потоки на генераторах
>> c использованием нативных потоков OS, да и для кластеров есть решения (
>> http://pyro.sourceforge.net/ ).
C>В Python на все потоки — общий GC. В Erlang'е оно, скорее всего, из-за
C>копирования сообщений тормозит.
В Эрланге "оно" вообще-то не тормозит, "оно" в 2-4 раз быстрее, если не замерять файловый ввод-вывод и время старта рантайма.