首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Erlang并发模型

Erlang并发模型
EN

Stack Overflow用户
提问于 2011-10-08 02:01:06
回答 2查看 187关注 0票数 0

这可能是一个非常基本的问题,但Erlang是否能够在另一个进程上调用一个方法,并等待它在没有休眠线程的情况下使用某种对象类型进行响应?

EN

回答 2

Stack Overflow用户

发布于 2011-10-08 02:06:05

如果您正在等待答案,那么调用进程最终将不得不休眠…但这没什么大不了的。

当进程停留在receive循环中时,其他进程可以工作。事实上,有数千个进程只等待消息的情况并不少见。由于Erlang进程不是真正的OS线程,它们是非常轻量级的,因此性能损失很小。

实际上,睡眠的实现方式如下所示:

代码语言:javascript
复制
sleep(Milliseconds) ->
    receive
        % Intentionally left empty
    after Milliseconds -> ok
    end.
票数 1
EN

Stack Overflow用户

发布于 2011-10-08 08:14:39

是的,可以偷看邮箱,如果你是这个意思的话。假设我们向另一个进程发送了一条消息,现在我们想看看另一个进程是否向我们发回了一些消息。但是我们不想阻塞接收:

代码语言:javascript
复制
 receive
    Pattern -> Body;
    Pattern2 -> Body2
 after 0 ->
    AfterBody
 end

将尝试与邮箱中的PatternPattern2进行匹配。如果没有匹配,它将立即超时并转到AfterBody。这允许您实现对邮箱的非阻塞窥视。

如果进程是一个gen_server,那么当回调返回到gen_server的控制之下时,可以通过调整内部状态和Timeout设置来达到同样的效果。你可以设置0的超时来实现这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7691081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档