【发布时间】:2014-08-29 08:07:29
【问题描述】:
我有这两个功能
check_requests(Timestamp,Plan,AddInfo)->
{Day,_Month,_Year,Hour,Minute,Second,Micro} = Timestamp,
ExpiredRequests = lists:filter(fun(Elem) ->
{_ID,Time,_Key,_Action} = Elem,
Time < {Day,Hour,Minute,Second,Micro}
end, Plan),
NewPlan = Plan -- ExpiredRequests,
make_requests(ExpiredRequests,AddInfo),
NewPlan.
make_requests([],_)->ok;
make_requests([ExpiredRequest|Rest],AddInf)->
{_ID,_Time,Key,Action} = ExpiredRequest,
spawn(?MODULE,request,[AddInf,Action,Key]),
make_requests(Rest,AddInf).
主要思想是我有一个计划,每个请求都有一个到期时间,应该执行。到期后,我想与其他可能及时到期的请求同时执行该请求,因此我使用新进程生成请求函数。现在,如果我有数百万个请求,我将有数百万个进程,我认为这是不希望的。请求执行最多可能持续一分钟。 我想知道当我生成的函数完成后进程会发生什么。它被杀死了吗?还是它仍然存在并且应该被垃圾收集?我真的需要并发请求并且不知道我还能如何实现它。 还有一些 OTP 行为在这种情况下可能会有所帮助吗?我还没有研究过 OTP,我处于整个 Erlang 框架的中间位置。
【问题讨论】:
标签: concurrency erlang spawn erlang-otp