深入理解消息传递与通用服务器
1. 并发编程的挑战与消息传递基础
并发编程充满挑战,需要处理竞态条件、死锁、临界区以及众多边缘情况。不过,在某些编程场景中,很多这类问题都能得到有效处理。下面我们先从简单的客户端 - 服务器系统的消息传递代码入手。
1.1 基础消息传递代码
最初的 call/2 和 reply 函数代码如下:
call(Name, Message) ->
Name ! {request, self(), Message},
receive
{reply, Reply} -> Reply
end.
reply(Pid, Reply) ->
Pid ! {reply, Reply}.
在这个实现中,客户端向服务器发送 {request, Pid, Message} 格式的消息,并等待 {reply, Reply} 格式的响应。但这里存在一个问题,我们无法确定收到的响应是否真的来自服务器,可能是其他符合协议的进程发送的消息。
1.2 使用引用解决消息验证问题
为了解决上述问题,我们引入引用。修改后的代码如下:
call(Name, Msg) ->
Ref = make_ref(),
Name ! {request, {
超级会员免费看
订阅专栏 解锁全文
1162

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



