Chinaunix首页 | 论坛 | 博客
  • 博客访问: 398952
  • 博文数量: 69
  • 博客积分: 1984
  • 博客等级: 上尉
  • 技术积分: 953
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-28 00:43
个人简介

学无所长,一事无成

文章分类

全部博文(69)

文章存档

2015年(19)

2014年(14)

2013年(9)

2012年(17)

2010年(10)

我的朋友

分类: Python/Ruby

2013-11-21 10:23:14

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) |
给主人留下些什么吧!~~