<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: 素数求解，兼谈Erlang的性能特性</title>
	<atom:link href="http://erlang-china.org/study/prime_case-and-erlang_performance.html/feed" rel="self" type="application/rss+xml" />
	<link>http://erlang-china.org/study/prime_case-and-erlang_performance.html</link>
	<description>erlang 中文社区</description>
	<lastBuildDate>Tue, 03 Jan 2012 15:49:56 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
	<item>
		<title>By: Raindy Long</title>
		<link>http://erlang-china.org/study/prime_case-and-erlang_performance.html/comment-page-1#comment-31280</link>
		<dc:creator>Raindy Long</dc:creator>
		<pubDate>Sun, 18 Sep 2011 00:44:25 +0000</pubDate>
		<guid isPermaLink="false">http://erlang-china.org/?p=625#comment-31280</guid>
		<description>&lt;a href=&quot;#comment-14806&quot; rel=&quot;nofollow&quot;&gt;@jackyz&lt;/a&gt; 

放在现在平台上快了好多：

[raindy@free01 erlang]$ erl -eval &quot;prime:start(a, 100000).&quot; -s c q -noshell
total running time: 80 ms 
found primes number:0
[raindy@free01 erlang]$ erl -eval &quot;prime:start(e, 100000).&quot; -s c q -noshell
total running time: 2620 ms 
found primes number:9592
[raindy@free01 erlang]$ date
Sat Sep 17 21:36:58 CST 2011</description>
		<content:encoded><![CDATA[<p><a href="#comment-14806" rel="nofollow">@jackyz</a> </p>
<p>放在现在平台上快了好多：</p>
<p>[raindy@free01 erlang]$ erl -eval &#8220;prime:start(a, 100000).&#8221; -s c q -noshell<br />
total running time: 80 ms<br />
found primes number:0<br />
[raindy@free01 erlang]$ erl -eval &#8220;prime:start(e, 100000).&#8221; -s c q -noshell<br />
total running time: 2620 ms<br />
found primes number:9592<br />
[raindy@free01 erlang]$ date<br />
Sat Sep 17 21:36:58 CST 2011</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: dior</title>
		<link>http://erlang-china.org/study/prime_case-and-erlang_performance.html/comment-page-1#comment-17721</link>
		<dc:creator>dior</dc:creator>
		<pubDate>Thu, 27 May 2010 08:01:18 +0000</pubDate>
		<guid isPermaLink="false">http://erlang-china.org/?p=625#comment-17721</guid>
		<description>Hello, blogger, your article very good, looking forward to sharing your latest</description>
		<content:encoded><![CDATA[<p>Hello, blogger, your article very good, looking forward to sharing your latest</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: laja</title>
		<link>http://erlang-china.org/study/prime_case-and-erlang_performance.html/comment-page-1#comment-17570</link>
		<dc:creator>laja</dc:creator>
		<pubDate>Sat, 15 May 2010 09:52:58 +0000</pubDate>
		<guid isPermaLink="false">http://erlang-china.org/?p=625#comment-17570</guid>
		<description>更优雅的实现:
[code]
-module( echo ).
-export( [ test/1] ).

test(N)-&gt; 
    statistics(runtime),
    All=run(N),
    {_, T} = statistics(runtime),
    io:format(&quot;Total running time: ~p ms ~n&quot;, [T]).
    %%io:format(&quot;Total:~p running time: ~p ms ~n&quot;, [All,T]).

run(1) -&gt; error; 
run(2) -&gt; [2]; 
run(N) when N rem 2 == 0 -&gt; run(N-1);
run(N) -&gt; findPrime(3,N,[2],false).		%%直接从3开始,到N为止 

findPrime(X, N, L,true) -&gt; findPrime(X,N,[X-2&#124;L],false);
findPrime(N, N, L,_) -&gt; [N&#124;L];
findPrime(X, N, L,false) -&gt; findPrime(X+2,N,L,isPrimeInt(X,3,trunc(math:sqrt(X)+1))).

isPrimeInt(_, S, E) when S &gt;=  E -&gt; true;
isPrimeInt(X, S, _) when X rem S == 0 -&gt; false;
isPrimeInt(X, S, E) -&gt; isPrimeInt(X, S+2, E).
[/code]

&gt; echo:test(1000000).
Total: running time: 1859 ms</description>
		<content:encoded><![CDATA[<p>更优雅的实现:<br />
[code]<br />
-module( echo ).<br />
-export( [ test/1] ).</p>
<p>test(N)-&gt;<br />
    statistics(runtime),<br />
    All=run(N),<br />
    {_, T} = statistics(runtime),<br />
    io:format("Total running time: ~p ms ~n", [T]).<br />
    %%io:format("Total:~p running time: ~p ms ~n", [All,T]).</p>
<p>run(1) -&gt; error;<br />
run(2) -&gt; [2];<br />
run(N) when N rem 2 == 0 -&gt; run(N-1);<br />
run(N) -&gt; findPrime(3,N,[2],false).		%%直接从3开始,到N为止 </p>
<p>findPrime(X, N, L,true) -&gt; findPrime(X,N,[X-2|L],false);<br />
findPrime(N, N, L,_) -&gt; [N|L];<br />
findPrime(X, N, L,false) -&gt; findPrime(X+2,N,L,isPrimeInt(X,3,trunc(math:sqrt(X)+1))).</p>
<p>isPrimeInt(_, S, E) when S &gt;=  E -&gt; true;<br />
isPrimeInt(X, S, _) when X rem S == 0 -&gt; false;<br />
isPrimeInt(X, S, E) -&gt; isPrimeInt(X, S+2, E).<br />
[/code]</p>
<p>&gt; echo:test(1000000).<br />
Total: running time: 1859 ms</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: 孤云一朵</title>
		<link>http://erlang-china.org/study/prime_case-and-erlang_performance.html/comment-page-1#comment-15992</link>
		<dc:creator>孤云一朵</dc:creator>
		<pubDate>Tue, 09 Feb 2010 16:18:35 +0000</pubDate>
		<guid isPermaLink="false">http://erlang-china.org/?p=625#comment-15992</guid>
		<description>erlang 是为并发而生的。 下面这段并发代码在虚拟机中跑了930ms
erl -eval &quot;make_prime:start(1000000).&quot; -noshell -s c q -smp +S 1

-module(make_prime).
-export([start/1]).

start(Num) -&gt;
    statistics(runtime),
    Pl = mapreduce(Num),
    {_, T} = statistics(runtime),
    io:format(&quot;total running time: ~p ms ~n&quot;, [T]),
    io:format(&quot;primes total : ~p ~n&quot;, [erlang:length(Pl)]).

mapreduce(Num) -&gt;
    Server = self(),
    Ref = erlang:make_ref(),
    Pids = prime_map(Server, Ref, 1, Num, []),
    reduce(Pids, Ref, []).

get_end(Start, Num) when Start == Num -&gt;
    Num;
get_end(Start, Num) when Start 
    End = if
        Start =
            Start + 5000;
        Start =
            Start + 500;
        Start =
            Start + 300;
        Start &gt; 500000 -&gt;
            Start + 100
    end,
    if
        End = End;
        End &gt; Num -&gt; Num
    end.

prime_map(Server, Ref, Start, Num, Pids) when Start =
    End = get_end(Start, Num),
    Pid = spawn( fun() -&gt; do_prime(Server, Ref, Start, End) end ),
    prime_map(Server, Ref, End+1, Num, [Pid&#124;Pids]);

prime_map(_Server, _Ref, Start, Num, Pids) when Start &gt; Num -&gt;
    Pids.

do_prime(Server, Ref, Start, End) -&gt;
    Primes = find_primes(Start, End, []),
    Server ! {self(), Ref, Primes}.

find_primes(Start, End, Primes) when Start 
    case is_prime(Start, trunc(math:sqrt(Start)+1)) of
        true -&gt;
            find_primes(Start+1, End, [Start&#124;Primes]);
        _ -&gt;
            find_primes(Start+1, End, Primes)
    end;
find_primes(Start, End, Primes) when Start == End -&gt;
    case is_prime(Start, trunc(math:sqrt(Start)+1)) of
        true -&gt;
            lists:reverse([Start&#124;Primes]);
        _ -&gt;
            lists:reverse(Primes)
    end.

is_prime(1, _) -&gt; false;
is_prime(2, _) -&gt; true;
is_prime(Int, Sqrt) -&gt;
    is_prime(2, Int, Sqrt).
is_prime(N, Int, Sqrt) when N =
    case Int rem N of
        0 -&gt;
            false;
        _ -&gt;
            is_prime(N+1, Int, Sqrt)
    end;
is_prime(_, _, _) -&gt; true.


reduce([Pid&#124;T], Ref, Primes) -&gt;
    receive
        {Pid, Ref, Ret} -&gt;
            reduce(T, Ref, append_list(Ret, Primes))
    end;
reduce([], _, Primes) -&gt;
    Primes.

append_list([H&#124;T], List) -&gt;
    append_list(T, [H&#124;List]);
append_list([], List) -&gt;
    List.</description>
		<content:encoded><![CDATA[<p>erlang 是为并发而生的。 下面这段并发代码在虚拟机中跑了930ms<br />
erl -eval &#8220;make_prime:start(1000000).&#8221; -noshell -s c q -smp +S 1</p>
<p>-module(make_prime).<br />
-export([start/1]).</p>
<p>start(Num) -&gt;<br />
    statistics(runtime),<br />
    Pl = mapreduce(Num),<br />
    {_, T} = statistics(runtime),<br />
    io:format(&#8220;total running time: ~p ms ~n&#8221;, [T]),<br />
    io:format(&#8220;primes total : ~p ~n&#8221;, [erlang:length(Pl)]).</p>
<p>mapreduce(Num) -&gt;<br />
    Server = self(),<br />
    Ref = erlang:make_ref(),<br />
    Pids = prime_map(Server, Ref, 1, Num, []),<br />
    reduce(Pids, Ref, []).</p>
<p>get_end(Start, Num) when Start == Num -&gt;<br />
    Num;<br />
get_end(Start, Num) when Start<br />
    End = if<br />
        Start =<br />
            Start + 5000;<br />
        Start =<br />
            Start + 500;<br />
        Start =<br />
            Start + 300;<br />
        Start &gt; 500000 -&gt;<br />
            Start + 100<br />
    end,<br />
    if<br />
        End = End;<br />
        End &gt; Num -&gt; Num<br />
    end.</p>
<p>prime_map(Server, Ref, Start, Num, Pids) when Start =<br />
    End = get_end(Start, Num),<br />
    Pid = spawn( fun() -&gt; do_prime(Server, Ref, Start, End) end ),<br />
    prime_map(Server, Ref, End+1, Num, [Pid|Pids]);</p>
<p>prime_map(_Server, _Ref, Start, Num, Pids) when Start &gt; Num -&gt;<br />
    Pids.</p>
<p>do_prime(Server, Ref, Start, End) -&gt;<br />
    Primes = find_primes(Start, End, []),<br />
    Server ! {self(), Ref, Primes}.</p>
<p>find_primes(Start, End, Primes) when Start<br />
    case is_prime(Start, trunc(math:sqrt(Start)+1)) of<br />
        true -&gt;<br />
            find_primes(Start+1, End, [Start|Primes]);<br />
        _ -&gt;<br />
            find_primes(Start+1, End, Primes)<br />
    end;<br />
find_primes(Start, End, Primes) when Start == End -&gt;<br />
    case is_prime(Start, trunc(math:sqrt(Start)+1)) of<br />
        true -&gt;<br />
            lists:reverse([Start|Primes]);<br />
        _ -&gt;<br />
            lists:reverse(Primes)<br />
    end.</p>
<p>is_prime(1, _) -&gt; false;<br />
is_prime(2, _) -&gt; true;<br />
is_prime(Int, Sqrt) -&gt;<br />
    is_prime(2, Int, Sqrt).<br />
is_prime(N, Int, Sqrt) when N =<br />
    case Int rem N of<br />
        0 -&gt;<br />
            false;<br />
        _ -&gt;<br />
            is_prime(N+1, Int, Sqrt)<br />
    end;<br />
is_prime(_, _, _) -&gt; true.</p>
<p>reduce([Pid|T], Ref, Primes) -&gt;<br />
    receive<br />
        {Pid, Ref, Ret} -&gt;<br />
            reduce(T, Ref, append_list(Ret, Primes))<br />
    end;<br />
reduce([], _, Primes) -&gt;<br />
    Primes.</p>
<p>append_list([H|T], List) -&gt;<br />
    append_list(T, [H|List]);<br />
append_list([], List) -&gt;<br />
    List.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: yarco</title>
		<link>http://erlang-china.org/study/prime_case-and-erlang_performance.html/comment-page-1#comment-15309</link>
		<dc:creator>yarco</dc:creator>
		<pubDate>Wed, 30 Dec 2009 03:02:26 +0000</pubDate>
		<guid isPermaLink="false">http://erlang-china.org/?p=625#comment-15309</guid>
		<description>&lt;a href=&quot;#comment-14850&quot; rel=&quot;nofollow&quot;&gt;@jackyz&lt;/a&gt; 
精彩!鼓掌!</description>
		<content:encoded><![CDATA[<p><a href="#comment-14850" rel="nofollow">@jackyz</a><br />
精彩!鼓掌!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jackyz</title>
		<link>http://erlang-china.org/study/prime_case-and-erlang_performance.html/comment-page-1#comment-14869</link>
		<dc:creator>jackyz</dc:creator>
		<pubDate>Mon, 30 Nov 2009 04:47:42 +0000</pubDate>
		<guid isPermaLink="false">http://erlang-china.org/?p=625#comment-14869</guid>
		<description>&lt;blockquote cite=&quot;#commentbody-14868&quot;&gt;
&lt;strong&gt;&lt;a href=&quot;#comment-14868&quot; rel=&quot;nofollow&quot;&gt;refactor&lt;/a&gt; :&lt;/strong&gt;
采用NIF实现素数求解的运行效率和C几乎差不多
&lt;a href=&quot;http://cryolite.javaeye.com/blog/534368&quot; rel=&quot;nofollow&quot;&gt;http://cryolite.javaeye.com/blog/534368&lt;/a&gt;
&lt;/blockquote&gt;
Awesome !</description>
		<content:encoded><![CDATA[<blockquote cite="#commentbody-14868"><p>
<strong><a href="#comment-14868" rel="nofollow">refactor</a> :</strong><br />
采用NIF实现素数求解的运行效率和C几乎差不多<br />
<a href="http://cryolite.javaeye.com/blog/534368" rel="nofollow">http://cryolite.javaeye.com/blog/534368</a>
</p></blockquote>
<p>Awesome !</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: refactor</title>
		<link>http://erlang-china.org/study/prime_case-and-erlang_performance.html/comment-page-1#comment-14868</link>
		<dc:creator>refactor</dc:creator>
		<pubDate>Mon, 30 Nov 2009 03:39:07 +0000</pubDate>
		<guid isPermaLink="false">http://erlang-china.org/?p=625#comment-14868</guid>
		<description>采用NIF实现素数求解的运行效率和C几乎差不多
http://cryolite.javaeye.com/blog/534368</description>
		<content:encoded><![CDATA[<p>采用NIF实现素数求解的运行效率和C几乎差不多<br />
<a href="http://cryolite.javaeye.com/blog/534368" rel="nofollow">http://cryolite.javaeye.com/blog/534368</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jackyz</title>
		<link>http://erlang-china.org/study/prime_case-and-erlang_performance.html/comment-page-1#comment-14850</link>
		<dc:creator>jackyz</dc:creator>
		<pubDate>Sat, 28 Nov 2009 07:26:49 +0000</pubDate>
		<guid isPermaLink="false">http://erlang-china.org/?p=625#comment-14850</guid>
		<description>&lt;blockquote cite=&quot;#commentbody-14807&quot;&gt;
&lt;strong&gt;&lt;a href=&quot;#comment-14807&quot; rel=&quot;nofollow&quot;&gt;mryufeng&lt;/a&gt; :&lt;/strong&gt;
上面的列表操作会导致GC 所以如果你能在命令行上 加上  +h 999999 那么速度会快很多。
&lt;/blockquote&gt;

测试结果没能证明 +h 参数调节 heap size 能带来正面影响。

&lt;code&gt;
jackyz@ubuntu:~$ erl -eval &quot;prime:start(c, 100000).&quot; -s c q -noshell
total running time: 730 ms 
found primes number:9592
jackyz@ubuntu:~$ erl +h 999999 -eval &quot;prime:start(c, 100000).&quot; -s c q -noshell
total running time: 770 ms 
found primes number:9592
jackyz@ubuntu:~$ erl -eval &quot;prime:start(e, 100000).&quot; -s c q -noshell
total running time: 6960 ms 
found primes number:9592
jackyz@ubuntu:~$ erl +h 999999 -eval &quot;prime:start(e, 100000).&quot; -s c q -noshell
total running time: 11950 ms 
found primes number:9592
&lt;/code&gt;

可以发现 +h 对分支 C 无明显效果，对分支 E 还会导致其更慢，在这里，可能 GC 并非关键。

例子本身的讨论就到这里，下面来讲一点虚的。

&lt;blockquote cite=&quot;#commentbody-14827&quot;&gt;
&lt;strong&gt;&lt;a href=&quot;#comment-14827&quot; rel=&quot;nofollow&quot;&gt;mryufeng&lt;/a&gt; :&lt;/strong&gt;
这样的简单的数学计算 不符合 small message, big computaion的原则。 所以即使是多进程并行计算 收益也是很小的。
erlang的优势不在于计算，而在于完善的网络和服务器的编程模式， 已经平台和工具支持。 所以定位非常重要。
&lt;a href=&quot;http://yufeng.info&quot; rel=&quot;nofollow&quot;&gt;http://yufeng.info&lt;/a&gt;
&lt;/blockquote&gt;

这一句也正是我想引用的，而且还要再引申一下：

&lt;blockquote&gt;
erlang 的确以一种尽可能高效的方式在语言级别提供了 message 这样一种编程设施，但归根结底 message 仍然是有代价的。“small message, big computation”这一指导原则的内在逻辑是——只有当 computation 的代价要明显的比 message 的代价高时，引入 message 的意义才能得以体现。否则，就没有意义(甚至还可能会产生反效果)。

这里的 message，我们也可以推而广之，将其外延扩展到其他(同样也是有代价的)语言设施，比如 list 。在我们做算法设计时，如果计划引入某种设计(保存结果以备重用)来进行优化，以降低部分的计算量(整除计算)。那么，非常有必要根据实际情况来评估这两个方案各自的性能代价。只有当引入某种设计的代价明显低于计算的代价时，这样的优化才是“真正的优化”，否则就有可能是“草率的优化”。

这里的“实际情况”并不是个虚头八脑装13的词。对于“求素数”这个例子而言，显然，在我们目前尝试的运算规模下(10万~100万以内的素数)，运算(整除)的代价，要远远低于引入设计(保存结果以备重用)的代价。因而，这个设计并没有获得它预期的优化效果。但是，如果我们的运算规模足够巨大。比如，假设你现在要给 CIA 写一个专门用来破解 RSA 算法的超级程序(PS. RSA 加密体系是建立在大素数的基础之上)。那么，我们可以预计，随着运算规模的不断膨胀，每次求素数计算的代价会不断的膨胀，终于，会在某个数量级时，其代价将会大于引入设计的代价。此时，在这种“实际情况”下，此前显得多余的设计，就会开始发挥作用。
&lt;/blockquote&gt;

从这个意义上说， Erlang 不能只当作一种单纯的计算机语言或技术来对待，它同时也可以意味着一些不同的软件思想，对于我们当中的大多数人来说，工作当中也许不一定用得上，但至少，是一种“有益的补充”。</description>
		<content:encoded><![CDATA[<blockquote cite="#commentbody-14807"><p>
<strong><a href="#comment-14807" rel="nofollow">mryufeng</a> :</strong><br />
上面的列表操作会导致GC 所以如果你能在命令行上 加上  +h 999999 那么速度会快很多。
</p></blockquote>
<p>测试结果没能证明 +h 参数调节 heap size 能带来正面影响。</p>
<p><code><br />
jackyz@ubuntu:~$ erl -eval "prime:start(c, 100000)." -s c q -noshell<br />
total running time: 730 ms<br />
found primes number:9592<br />
jackyz@ubuntu:~$ erl +h 999999 -eval "prime:start(c, 100000)." -s c q -noshell<br />
total running time: 770 ms<br />
found primes number:9592<br />
jackyz@ubuntu:~$ erl -eval "prime:start(e, 100000)." -s c q -noshell<br />
total running time: 6960 ms<br />
found primes number:9592<br />
jackyz@ubuntu:~$ erl +h 999999 -eval "prime:start(e, 100000)." -s c q -noshell<br />
total running time: 11950 ms<br />
found primes number:9592<br />
</code></p>
<p>可以发现 +h 对分支 C 无明显效果，对分支 E 还会导致其更慢，在这里，可能 GC 并非关键。</p>
<p>例子本身的讨论就到这里，下面来讲一点虚的。</p>
<blockquote cite="#commentbody-14827"><p>
<strong><a href="#comment-14827" rel="nofollow">mryufeng</a> :</strong><br />
这样的简单的数学计算 不符合 small message, big computaion的原则。 所以即使是多进程并行计算 收益也是很小的。<br />
erlang的优势不在于计算，而在于完善的网络和服务器的编程模式， 已经平台和工具支持。 所以定位非常重要。<br />
<a href="http://yufeng.info" rel="nofollow">http://yufeng.info</a>
</p></blockquote>
<p>这一句也正是我想引用的，而且还要再引申一下：</p>
<blockquote><p>
erlang 的确以一种尽可能高效的方式在语言级别提供了 message 这样一种编程设施，但归根结底 message 仍然是有代价的。“small message, big computation”这一指导原则的内在逻辑是——只有当 computation 的代价要明显的比 message 的代价高时，引入 message 的意义才能得以体现。否则，就没有意义(甚至还可能会产生反效果)。</p>
<p>这里的 message，我们也可以推而广之，将其外延扩展到其他(同样也是有代价的)语言设施，比如 list 。在我们做算法设计时，如果计划引入某种设计(保存结果以备重用)来进行优化，以降低部分的计算量(整除计算)。那么，非常有必要根据实际情况来评估这两个方案各自的性能代价。只有当引入某种设计的代价明显低于计算的代价时，这样的优化才是“真正的优化”，否则就有可能是“草率的优化”。</p>
<p>这里的“实际情况”并不是个虚头八脑装13的词。对于“求素数”这个例子而言，显然，在我们目前尝试的运算规模下(10万~100万以内的素数)，运算(整除)的代价，要远远低于引入设计(保存结果以备重用)的代价。因而，这个设计并没有获得它预期的优化效果。但是，如果我们的运算规模足够巨大。比如，假设你现在要给 CIA 写一个专门用来破解 RSA 算法的超级程序(PS. RSA 加密体系是建立在大素数的基础之上)。那么，我们可以预计，随着运算规模的不断膨胀，每次求素数计算的代价会不断的膨胀，终于，会在某个数量级时，其代价将会大于引入设计的代价。此时，在这种“实际情况”下，此前显得多余的设计，就会开始发挥作用。
</p></blockquote>
<p>从这个意义上说， Erlang 不能只当作一种单纯的计算机语言或技术来对待，它同时也可以意味着一些不同的软件思想，对于我们当中的大多数人来说，工作当中也许不一定用得上，但至少，是一种“有益的补充”。</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: mryufeng</title>
		<link>http://erlang-china.org/study/prime_case-and-erlang_performance.html/comment-page-1#comment-14827</link>
		<dc:creator>mryufeng</dc:creator>
		<pubDate>Thu, 26 Nov 2009 16:59:00 +0000</pubDate>
		<guid isPermaLink="false">http://erlang-china.org/?p=625#comment-14827</guid>
		<description>这样的简单的数学计算 不符合 small message, big computaion的原则。 所以即使是多进程并行计算 收益也是很小的。

erlang的优势不在于计算，而在于完善的网络和服务器的编程模式， 已经平台和工具支持。 所以定位非常重要。

http://yufeng.info</description>
		<content:encoded><![CDATA[<p>这样的简单的数学计算 不符合 small message, big computaion的原则。 所以即使是多进程并行计算 收益也是很小的。</p>
<p>erlang的优势不在于计算，而在于完善的网络和服务器的编程模式， 已经平台和工具支持。 所以定位非常重要。</p>
<p><a href="http://yufeng.info" rel="nofollow">http://yufeng.info</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ronalfei</title>
		<link>http://erlang-china.org/study/prime_case-and-erlang_performance.html/comment-page-1#comment-14809</link>
		<dc:creator>ronalfei</dc:creator>
		<pubDate>Wed, 25 Nov 2009 10:41:33 +0000</pubDate>
		<guid isPermaLink="false">http://erlang-china.org/?p=625#comment-14809</guid>
		<description>我是初学者,我想问个问题.这样的测试是不是只能说在顺序编程中的效率呢?
而erlang的面向并发是其主要特点..我觉得如果真要比较的话.
是不是换种方式来写会好点.比如利用并发进程:
创建10个并发进程.而这10个进程分别求各个10W的素数.(1~10W&#124;100..1~`999..&#124;T)
利用顺序编程创建10个并发进程,然后他们自己去求值.最后得到各个进程所花的时间.这样的一个方式在去和java进行比较呢.?是不是更有意思.
当然java代码也要更改.也用同样的创建10个线程去分别求解..

老大能不能这样去计算一下....

初学的想法...大家不要喷我...</description>
		<content:encoded><![CDATA[<p>我是初学者,我想问个问题.这样的测试是不是只能说在顺序编程中的效率呢?<br />
而erlang的面向并发是其主要特点..我觉得如果真要比较的话.<br />
是不是换种方式来写会好点.比如利用并发进程:<br />
创建10个并发进程.而这10个进程分别求各个10W的素数.(1~10W|100..1~`999..|T)<br />
利用顺序编程创建10个并发进程,然后他们自己去求值.最后得到各个进程所花的时间.这样的一个方式在去和java进行比较呢.?是不是更有意思.<br />
当然java代码也要更改.也用同样的创建10个线程去分别求解..</p>
<p>老大能不能这样去计算一下&#8230;.</p>
<p>初学的想法&#8230;大家不要喷我&#8230;</p>
]]></content:encoded>
	</item>
</channel>
</rss>

