确定生成的所有erlang进程是否都是空闲的
我想知道我生成的所有进程是否都处于空闲状态,或者没有做任何事情。所以我有一个特别的例子,它产生了1000个确定生成的所有erlang进程是否都是空闲的,erlang,Erlang,我想知道我生成的所有进程是否都处于空闲状态,或者没有做任何事情。所以我有一个特别的例子,它产生了1000个proc/3 proc(A,B,C) -> receive {do} -> NewA = % doing something NewB = % doing something NewC = % doing something % doing something
proc/3
proc(A,B,C) ->
receive
{do} ->
NewA = % doing something
NewB = % doing something
NewC = % doing something
% doing something
% ...
io:format("Process: ~w is done doing something.", [self()]),
proc(NewA,NewB,NewC)
end
[,,…]
现在,这些进程中的每一个都会收到一条消息
{do}
,告诉它们与其他进程同时执行它下面的语句。我如何知道所有进程是执行完毕还是现在处于空闲状态?我遇到了这个问题,我通过向负责发送do消息的进程发回一条消息来解决它。就我而言,我只需数一数答案的数量
proc(A,B,C,From) ->
receive
{do} ->
NewA = % doing something
NewB = % doing something
NewC = % doing something
% doing something
% ...
io:format("Process: ~w is done doing something.", [self()]),
From ! {job_done,self()},
proc(NewA,NewB,NewC,From)
end
当一个进程完成它的工作并变得空闲时,你能结束它吗?如果可以,可以使用监视器。不,进程必须保持活动状态。