因此,在Joe Armstrong聲稱erlang進程很便宜並且vm可以處理數百萬進程之後。我決定在我的機器上進行測試:Erlang VM在創建數百萬個進程時死亡
process_galore(N)->
io:format("process limit: ~p~n", [erlang:system_info(process_limit)]),
statistics(runtime),
statistics(wall_clock),
L = for(0, N, fun()-> spawn(fun() -> wait() end) end),
{_, Rt} = statistics(runtime),
{_, Wt} = statistics(wall_clock),
lists:foreach(fun(Pid)-> Pid ! die end, L),
io:format("Processes created: ~p~n
Run time ms: ~p~n
Wall time ms: ~p~n
Average run time: ~p microseconds!~n", [N, Rt, Wt, (Rt/N)*1000]).
wait()->
receive die ->
done
end.
for(N, N, _)->
[];
for(I, N, Fun) when I < N ->
[Fun()|for(I+1, N, Fun)].
結果令人印象深刻的數百萬個進程 - 我得到的aprox 6.6微!秒平均產卵時間。但是,當啓動3m進程時,OS shell打印出「殺死」了erlang運行時間。 我使用+ P 5000000標誌運行erl,系統是:使用quadcore i7和8GB ram的arch linux。
當您打印「殺死」並殺死進程時,您是否內存不足?請參閱http://stackoverflow.com/questions/726690/who-killed-my-process-and-why。 – Dogbert
就是這樣,謝謝你的提示。 dmesg顯示內存不足故障 – Sharas