Concurrency 一些httpc请求既不完整也不触发错误

Concurrency 一些httpc请求既不完整也不触发错误,concurrency,erlang,Concurrency,Erlang,向给定URL发出N个并发请求,例如,escript client.erlhttp://127.0.0.1:1234/random?num=1000 3200发出3200个并发请求。为了完整起见,可以找到相应的服务器 客户端使用spawn\u链接生成N个进程,每个进程发出一个请求。派生进程中的httpc:request调用的成功/失败在派生进程中处理(在dispatch\u requests函数中),并传播到父进程。父进程还处理来自衍生进程的数据消息和对应于衍生进程异常终止的退出消息。因此,父进程

向给定URL发出N个并发请求,例如,
escript client.erlhttp://127.0.0.1:1234/random?num=1000 3200
发出3200个并发请求。为了完整起见,可以找到相应的服务器

客户端使用
spawn\u链接
生成N个进程,每个进程发出一个请求。派生进程中的
httpc:request
调用的成功/失败在派生进程中处理(在
dispatch\u requests
函数中),并传播到父进程。父进程还处理来自衍生进程的数据消息和对应于衍生进程异常终止的退出消息。因此,父进程在正常终止之前,会等待从生成的进程接收N条消息

鉴于上述上下文,客户端挂起一些执行(例如,服务器被强制终止),因为父进程从未从子进程接收到N条消息。我在运行Raspbian 9.9和esl erlang 22.0-1的Raspberry Pi 3B上观察到了这种行为

父进程似乎没有处理所有终止子进程的情况。如果是,这些情况是什么?如果不是,那么少于N条消息的原因可能是什么

客户端代码:

%escript client.erlhttp://127.0.0.1:1234/random?num=5 30
-模块(客户端)。
-导出([main/1])。
-进口(httpc,[request/1])。
-模式(编译)。
调度请求(Url,父级)->
开始=erlang:单调时间(微秒),
{Status,Value}=httpc:request(get,{Url,[]},[{timeout,60000}],]),
已用时间=(erlang:单调时间(微秒)-开始)/1000,
Msg=案件状态
好的->
io_库:格式(“~pms OK”,[Exposed_Time]);
错误->
io_库:格式(“~pms REQ_ERR~p”,[运行时间,元素(1,值)])
完,,
父母亲{状态,Msg}。
等待子项(0、NumOfSucc、NUMOFFILE)->
io:format(“Success:~p~n”,[Numofsuck]),
io:格式(“失败:~p~n,[numofail]);
等待子项(Num、NumOfSucc、NUMOFFILE)->
接收
{'EXIT',ChildPid,{ErrorCode,{}}->
io:格式(“Child~p~p~n”,[ChildPid,ErrorCode]),
等待子项(Num-1、nummofsuck、nummoffail);
{裁决,Msg}->
io:格式(“~s~n”,[Msg]),
案件判决
确定->等待子项(Num-1,nummofsuck+1,nummoffail);
错误->在子项上等待(Num-1、nummofsuck、nummoffail+1)
结束
结束。
main(Args)->
inets:start(),
Url=列表:n(1,Args),
Num=列表到整数(列表:n(2,Args)),
Parent=self(),
进程_标志(陷阱_退出,真),
[生成链接(fun()->调度请求(Url,父级)结束)||
_