Erlang 行为进程的超时、死锁及相关处理策略
在使用 Erlang 进行开发时,行为进程的超时、死锁等问题是需要重点关注的。下面将详细介绍这些问题以及相应的处理策略。
调用超时
当使用 gen_server 调用向服务器发送同步消息时,通常期望在毫秒级内得到响应。但如果响应发送延迟,可能是服务器忙于处理大量请求,或者外部依赖(如数据库、认证服务器、IP 网络等)存在瓶颈。OTP 行为的同步 gen_server:call API 内置了 5 秒的超时时间,这能满足大多数软实时系统的查询需求,但也有一些特殊情况需要特殊处理。
如果在 5 秒内未收到响应,客户端进程将抛出异常。以下是一个示例回调模块:
-module(timeout).
-behavior(gen_server).
-export([init/1, handle_call/3]).
init(_Args) ->
{ok, undefined}.
handle_call({sleep, Ms}, _From, LoopData) ->
timer:sleep(Ms),
{reply, ok, LoopData}.
在 gen_server:call/2 函数中,发送格式为 {sleep, Ms} 的消息,其中 Ms 用于 handle_call/3 回调中的 timer:
超级会员免费看
订阅专栏 解锁全文
327

被折叠的 条评论
为什么被折叠?



