actors可以替代:
一个线程
一个对象或者组件
一个callback或者listener
一个单例或者服务
一个路由转发者,负载均衡器,池
一个java ee的session bean或者事件驱动bean
创建很多的actors:
actors不像线程一样重,可以把它们当做轻量级的对象来看
为每个请求创建一个actor?没问题
为处理一个message,创建一个内部actor去处理?可以
actor树应该很深,而不是很浅
不要用阻塞,否则会ties up该线程,并占有大量系统资源。
如果一定要用,在一个独立的线程池中适用阻塞api,将其隔离在actor或者future中。(ppt 49页)
配置
dispatcher(thread pool)
actors树形继承结构
默认的,事件驱动的,将一组actor绑到一个线程池中,共享线程的
默认为akka.actor.default-mailbox(无限邮箱,java.util.concurrent.concurrentlinkedqueue)默认是先进先出的队列,可以自行实现优先级队列,但akka中当前behavior必须总是处理下一个出队的消息,而且没有扫描mailbox的动作,处理消息失败时,即认为failure发生了,当然这个行为可以被重写
可以理解为calble,跑在线程池上
这是一个 actor 实例的句柄(handle),你可以用它来与实际的 actor进行交互。 the actorref 是不可变量,与它所代表的actor之间是一对一的关系
携带日志消息,死信.actor可以从eventstream订阅日志或者死信
<a target="_blank" href="http://www.gtan.com/akka_doc/scala/dispatchers.html">http://www.gtan.com/akka_doc/scala/dispatchers.html</a>
<a target="_blank" href="http://www.slideshare.net/developerforce/df121253-patterson?next_slideshow=1">http://www.slideshare.net/developerforce/df121253-patterson?next_slideshow=1</a>