Erlang 进程创建性能测试

测试代码来自 Progremming Erlang。
  Erlang: R13B (erts-5.7.1), 启动参数 +P 5000000
  系统: Window XP
  CPU: E8200 2.66G 双核
  内存: 4G
Erlang R13B (erts-5.7.1) [smp:2:2] [rq:2] [async-threads:0]
Eshell V5.7.1  (abort with ^G)
1> c(processes).
{ok,processes}
2> processes:max(1000000).
Maximum allowed processes:5000000
Process spawn time = 2.703(2.688) microseconds
ok
3> processes:max(1000000).
Maximum allowed processes:5000000
Process spawn time = 3.203(2.938) microseconds
ok
4> processes:max(1000000).
Maximum allowed processes:5000000
Process spawn time = 3.25(3.015) microseconds
ok
  结果:
  创建100W,平均3us左右。因为物理内存比较多。测试时内存高峰在1.2G左右, 由此可以估计一下进程的内存消耗。
  测试创建200W, 150W都不能正常运行。测试时,内存到1.8G以上时,werl进程死循环。不能结束。
  在WINDOW下,单进程的内存不能超过2G。可见,进程的上限也就100W多一点吧。如果加上其它开销。单个结点能创建的进程数量还会少很多。
  看下测试代码 for函数的编写并不是最优化的方式,改成尾递归形式:
  for(I, N, F) -> for_h(I, N, F, []).
  for_h(_N, _N, _, L) -> L;
  for_h(I, N, F, L) -> for_h(I+1, N, F, [F()|L]).
  再测试:
5> c(processes).
{ok,processes}
6> processes:max(1000000).
Maximum allowed processes:5000000
Process spawn time = 1.891(1.64) microseconds
ok
7> processes:max(1000000).
Maximum allowed processes:5000000
Process spawn time = 2.266(1.641) microseconds
ok
8> processes:max(1000000).
Maximum allowed processes:5000000
Process spawn time = 2.234(1.625) microseconds
ok
  结果在2us左右,看来尾递归还是影响挺大。


最新内容请见作者的GitHub页:http://qaseven.github.io/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值