https://github.com/celluloid/celluloid/wiki/Pipelining-and-execution-modes
Celluloid 缺省使用 "ATOM 模式"(详见 )。在 ATOM 模式下,Celluloid actos 会流水化作业,在这种模式下,当你执行一个阻塞调用时,主程序还会继续响应输入的请求,而非等待调用返回。在 Erlang 或 Akka 等 actor RPC 系统中你经常会遇见的某些死锁,在这种模式下都会很好的避免。
Celluloid 会为每一个收到的消息创建一个新的任务("task"),缺省情况下会为那个消息创建一个纤程(Fiber)作为任务分派调度单元。这种方式下 Celluloid 就可以提供看似同步调用,实则异步调用的接口 API。以下情况下,会挂起当前任务,切换至其他任务执行:
* 从一个 actor 中发起一个同步调用到另一个 actor
* 等待一个 future 调用的结果值
* 等待一个条件 condition 触发
* 使用 receive 方法接收一个原始的异步消息
* 调用 Celluloid#sleep 进入休眠模式(缺省的 sleep 方法对于所有 Celluloid actors 生效)
* 使用 Celluloid::IO 或 Celluloid::ZMQ 进行的任何 I/O 操作
某些情况下你可能确实需要阻塞,那你可以使用 模式。
阅读(1318) | 评论(0) | 转发(0) |