gpt4 book ai didi

process - Erlang VM 在创建数百万个进程时被杀死

转载 作者:行者123 更新时间:2023-12-04 12:18:49 25 4
gpt4 key购买 nike

因此,在 Joe Armstrongs 声称 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)].

百万个进程的结果令人印象深刻 - 我得到了大约 6.6 微!秒平均生成时间。但是当启动 3m 进程时,OS shell 打印“Killed”,而 erlang 运行时消失了。
我使用 +P 5000000 标志运行 erl,系统是:arch linux with quadcore i7 和 8GB ram。

最佳答案

Erlang 进程很便宜,但它们不是免费的。 Erlang 进程由 spawn 产生使用 338 words of memory ,在 64 位系统上为 2704 字节。生成 300 万个进程将使用至少 8112 MB 的 RAM,这还不包括创建 pid 链表和为每个进程创建的匿名函数的开销(如果它们是像你一样创建的,我不确定它们是否被共享) '正在创建。)您可能需要 10-12GB 的可用 RAM 来生成并保持 300 万(几乎)空进程。

正如我在评论中指出的(你后来证实了),“Killed”消息是在 Linux 内核杀死 Erlang VM 时打印的,很可能是因为使用了过多的 RAM。更多信息 here .

关于process - Erlang VM 在创建数百万个进程时被杀死,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38807010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com