Erlang 進程創(chuàng)建性能測試
測試代碼來自 Progremming Erlang。
Erlang: R13B (erts-5.7.1), 啟動參數(shù) +P 5000000
系統(tǒng): Window XP
CPU: E8200 2.66G 雙核
內(nèi)存: 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 |
結(jié)果:
創(chuàng)建100W,平均3us左右。因為物理內(nèi)存比較多。測試時內(nèi)存高峰在1.2G左右, 由此可以估計一下進程的內(nèi)存消耗。
測試創(chuàng)建200W, 150W都不能正常運行。測試時,內(nèi)存到1.8G以上時,werl進程死循環(huán)。不能結(jié)束。
在WINDOW下,單進程的內(nèi)存不能超過2G。可見,進程的上限也就100W多一點吧。如果加上其它開銷。單個結(jié)點能創(chuàng)建的進程數(shù)量還會少很多。
看下測試代碼 for函數(shù)的編寫并不是最優(yōu)化的方式,改成尾遞歸形式:
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 |
結(jié)果在2us左右,看來尾遞歸還是影響挺大。
posted on 2014-07-08 13:17 順其自然EVO 閱讀(270) 評論(0) 編輯 收藏 所屬分類: 測試學(xué)習(xí)專欄