前一段时间我在二郎(从C++/PHP/Java世界中来)非常感兴趣-我已经看到了它在业界已经successfuly使用,通过Ericsson,Facebook,Goldman Sachs,等,所以,我认为这将是一个伟大的平台使用低延迟配置文件构建高要求的应用程序,使用比Java(对我而言)更清晰,更好的语言.
但是在"哇哇效应"消失后,我发现有许多高性能的Java库似乎解决了Erlang理论上最适合的许多问题(实时,低延迟应用,并发,容错等). ).而且,似乎有些东西尽管是Erlang配置文件,但在BEAM上却无法实现(如LMAX Disruptor并发框架).
所以问题出现了:Erlang仍然是建立这样的最佳平台demanding applications吗?如果我们坚持使用一个非常成熟的(J)VM并尝试使用更少的可用资源(OTP团队的大小与JVM团队,支持者等)来实现类似的东西,那会不会更好?是否有可能performance and adoption通过BEAM 实现这种目标?
只是为了说清楚:我不想在这里发起火焰战争.我只是好奇,因为我真的很喜欢Erlang,我认为这是一个很棒的平台,我想投入时间和精力来建立真实的项目.但我想知道其他人可能会说些什么 - 如果我错了 - 也许有人可以纠正我.
目前,我正在阅读"编程Erlang"一书,我决定在一个创建N个进程的基准测试中测试我的系统,这里是代码:
-module(my_ring).
-export([start/1, start_proc/2]).
start(Num) ->
start_proc(Num, self()).
start_proc(0, Pid) ->
Pid ! ok;
start_proc(Num, Pid) ->
NPid = spawn(?MODULE, start_proc, [Num - 1, Pid]),
NPid ! ok,
receive
ok ->
ok
end.
Run Code Online (Sandbox Code Playgroud)
我在Windows 7 x64上安装了英特尔i5,在创建了1亿个进程时,我检查了CPU的负载.事实证明,只有一个核心满负荷运行,其他核心无效(因此整体系统负载为25%).我认为Erlang VM会平衡所有4个可用内核的负载,但事实并非如此.
有人知道为什么吗?我的Erlang VM配置有什么不好的地方吗?
我正在实施一个带2个入口大门的停车场和1个可以离开公园的停车场.对我来说,一切看起来都不错,但我得到的错误就像
Error in process <0.84.0> with exit value: {badarg,[{parking,car,2},{random,uniform,0}]}
Run Code Online (Sandbox Code Playgroud)
我的代码是:
-module (parking2).
-export ([start/3]).
-export ([car/2, parkingLoop/1]).
carsInit(0, _Iterations) ->
ok;
carsInit(Number, Iterations) ->
spawn(parking, car, [Number, Iterations]),
carsInit(Number - 1, Iterations).
car(_ID, 0) ->
ok;
car(ID, Iterations) ->
Gate = random:uniform(2),
parking ! {enter, self()},
receive
error ->
io:format("Car ~B ncanot enter - there is no free place.~n", [ID]),
Time = random:uniform(1000),
timer:sleep(Time),
car(ID, Iterations);
ok ->
io:format("Car ~B entered through the ~B gate~n", [ID, Gate])
end,
StopTime = …Run Code Online (Sandbox Code Playgroud)