Erlang 进程创建性能测试

Malinda ·
更新时间:2024-09-21
· 774 次阅读

  测试代码来自 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左右,看来尾递归还是影响挺大。

 



性能 进程 性能测试 erlang 测试

需要 登录 后方可回复, 如果你还没有账号请 注册新账号