erlang学习

Erlang程序设计第8章的习题:

start(N,M) ->
statistics(wall_clock),
Pids = for(1,N,fun(_X) -> spawn(fun get_msg/0) end),
for(1,M,fun(X)->send_msg(Pids, "message " ++ integer_to_list(X)) end),
{_,Time} = statistics(wall_clock),
io:format("take ~p seconds~n", [Time/1000]),
send_msg(Pids, stop),
ok.

for(N,N,F) ->
[F(N)];
for(I,N,F) ->
[F(I)|for(I+1,N,F)].

get_msg() ->
receive
stop ->
void;
_Any ->
% io:format("got ~p~n", [_Any]),
get_msg()
end.

send_msg([Pid], Msg) -> Pid!Msg;
send_msg([Pid|Pids], Msg) ->
Pid!Msg,
send_msg(Pids, Msg).

在笔记本上跑start(1000,1000)要0.4秒,而在一台双CPU的服务器上居然要1.3秒。以为是linux上编译erlang时有优化参数没有设好。看README,注意到默认是打开SMP模拟器的,于是试着使用
erl -smp disable
启动erl shell将smp模拟器关掉,结果CPU占用率从170%下降到100%,时间变成了0.3秒,看来模拟器的效率还不够好啊。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值