更新:此问题包含一个错误,使基准无意义.我将尝试更好的基准比较F#和Erlang的基本并发功能,并在另一个问题中查询结果.
我正在尝试了解Erlang和F#的性能特征.我发现Erlang的并发模型非常吸引人,但我倾向于使用F#来实现互操作性.虽然开箱即用F#不提供像Erlang的并发原语 - 从我可以告诉async和MailboxProcessor只涵盖Erlang做得很好的一小部分 - 我一直试图了解F#性能的可能性明智的.
在Joe Armstrong的Programming Erlang一书中,他指出Erlang中的进程非常便宜.他使用(大致)以下代码来证明这一事实:
-module(processes).
-export([max/1]).
%% max(N)
%% Create N processes then destroy them
%% See how much time this takes
max(N) ->
statistics(runtime),
statistics(wall_clock),
L = for(1, N, fun() -> spawn(fun() -> wait() end) end),
{_, Time1} = statistics(runtime),
{_, Time2} = statistics(wall_clock),
lists:foreach(fun(Pid) -> Pid ! die end, L),
U1 = Time1 * 1000 / N,
U2 = Time2 * 1000 / N,
io:format("Process spawn time=~p (~p) microseconds~n",
[U1, U2]).
wait() -> …Run Code Online (Sandbox Code Playgroud) 阅读完这个问题后,Erlang是集群计算世界的C吗?,我想知道正式的Erlang OTP编译HiPE?
换句话说,当我.erl使用OTP版本R13(例如)编译源代码时,它是否会生成"对象代码"BEAM?
查看http://www.it.uu.se/research/group/hipe/,似乎不再维护独立的HiPE编译器.
与通常的"非本机"编译相比,.erl使用该+native选项编译Erlang 源时有哪些限制/约束?