这可能是一个非常基本的问题,但是Erlang能够在另一个prcoess上调用一个方法,并等待它返回一些没有睡眠线程的对象类型?Erlang并发模型
0
A
回答
1
那么,如果你是等待作为答案,调用过程将不得不最终睡觉......但这没什么大不了的。
当进程卡在receive
循环中时,其他进程可以工作。实际上,有数千个进程只是在等待消息的情况并不罕见。由于Erlang进程不是真正的操作系统线程,它们非常轻便,所以性能损失很小。
事实上,睡眠的实现方式是这样的:
sleep(Milliseconds) ->
receive
% Intentionally left empty
after Milliseconds -> ok
end.
1
是的,这是可以窥视到邮箱,如果这是你的意思。假设我们已经发送了一条消息给另一个进程,现在我们想知道另一个进程是否已经向我们发送了一些消息。但是,我们不希望块在接收:
receive
Pattern -> Body;
Pattern2 -> Body2
after 0 ->
AfterBody
end
会试图匹配的邮箱Pattern
和Pattern2
。如果没有匹配,它会立即超时并转至AfterBody
。这使您可以实现对邮箱的无阻塞窥视。
如果过程是gen_server
,当回调返回到gen_server
的控件时,通过播放内部状态和Timeout
设置可以实现同样的效果。您可以设置0
的超时来实现此目的。
0
从问题得到的是我们正在谈论的Synchronous Message Passing
。是! Erlang可以很好地完成这项工作,它是处理Erlang中最基本的并发处理方式。考虑这个下面:
rpc(Request, To)-> MySelf = self(), To ! {MySelf,Request}, receive {To,Reply} -> Reply after timer:seconds(5) -> erlang:exit({error,timedout}) end.
上面的代码示出了一个进程将消息发送到另一个,并立即进入等待(用于应答),而不必睡觉。如果它在5秒内没有得到答复,它将退出。
相关问题
- 1. 并发模型:Erlang vs Clojure
- 2. 并发模型:Erlang,Elixir和Scala
- 3. WPF并发模型
- 4. PHP并发模型和Node.js并发模型之间的差异
- 5. nodejs中的并发模型
- 6. Erlang Web开发(Erlang新手)
- 7. Erlang并发和核心管理
- 8. Erlang新手 - 并发和消息传递
- 9. erlang和餐饮哲学家的并发
- 10. Erlang:发送消息给模块?
- 11. Erlang mime类型
- 12. Erlang rb模块
- 13. 的ActionScript 3(AS3)并发模型
- 14. Java内存模型和并发读取
- 15. 关于scrapy的并发模型
- 16. 并发模型mongodb学说symfony
- 17. Actor并发模型和缓存
- 18. Akka作为Clojure的并发模型
- 19. Java内存模型和并发
- 20. 将触发器合并到模型中
- 21. clojure中并发消息传递模型
- 22. 类型检查Erlang
- 23. erlang类型检测
- 24. 并行Erlang代码
- 25. Erlang网络发布
- 26. Erlang:模块属性
- 27. Erlang模块编译
- 28. Erlang显示器类型
- 29. 合并列表的erlang
- 30. ERLANG等待()并阻止
*我给出答案答案*回答* Mike Dotnet *。世界到底是什么? –