首页  

AKKA actor model 的一些思考     所属分类 akka 浏览量 729
Actor 线程间通信
CSP并发模型
Communicating Sequential Processes
独立的并发实体通过共享的通讯 Channel(管道)进行通信 

Go CSP 模式 与 常见的Actor模式区别(akka Erlang 使用 Actor模式)
Actor直接通讯,CSP 通过Channel进行通讯,更松的耦合
Go channel 有容量限制 并且独立于处理GOroutine
Erlang Actor模式中的mailbox容量无限,接收进程总是被动地处理消息

得益于golang runtime优秀的调度系统,阻塞goroutine不会真正的block底层的线程

Scala 初期本身包含Actor Model,后来的版本从语言核心实现中移除,
以库的方式 ,也就是 AKKA ,包含了大量的工具,比如http的实现,stream的构建以及分布式和持久化等特性

线程是一种昂贵的资源 
高效的利用线程 
netty 利用很少的 worker 线程 和 boss 线程 来处理 大量的连接


Actor 特点 底层默认使用 ForkJoin线程池 java.util.concurrent.ForkJoinPool ForkJoin线程池 能够最大化的保证每个CPU的任务队列均衡,如果出现空闲会从其他的队列偷取任务来计算 高度抽象,每个Actor作为一个处理逻辑的最小单元,接收各种消息,进行处理并将处理结果发送给另外的Actor 整个系统看起来就是各种Actor在做自己的事情并互相发消息的过程,隐藏了使用线程时的各种细节 可以将Actor看作是比线程资源更微小的处理单元 可以放心的启动成千上万个Actor,具体Actor的处理调度由自身的Dispatcher完成,不用担心过渡的消耗线程资源 全异步&高吞吐量 Local ActorSystem 将消息放到 对应 Actor的Mailbox Remote消息的发送 依赖 NIO 尽量不要在Actor的Receive方法里边进行阻塞调用,避免降低CPU的使用率,推荐的方式就是全异步处理 可能阻塞的调用,最好通过异步的消息发送给另外的处理单元,当前Actor的Receive处理过程完成,释放线程资源, 另外的Actor在处理完成后将消息异步的发送回当前的Actor进行接下来的处理,减少线程等待的时间 弹性的,可用来构建分布式系统 Akka提供 Cluster Stream等更高层次的抽象 包含DistributedPubSub/Cluster Singleton/Cluster Distributed Data 集群级别的router,balance loader等解决方案
Actor 缺点 高层次的抽象 损失了部分性能 最小的调度级别只是线程 计算密集型的任务推荐从线程的角度去构建,而不是依赖于Actor Model 轻量级分布式任务调度系统 ,Actor Model 负责服务拓扑,事件流转,底层的密集计算,直接通过操作线程资源来实现 不方便调试 同步调用 调用堆栈 事件驱动 顺序
go channel 实例 GO多线程异步处理实例 GO箴言 goproverbs 学习GO要了解的几个特性 akka简介 akka actor demo netty高性能之道 netty性能优化点 Netty和Akka的区别

上一篇     下一篇
一站式大数据平台StreamX

Spark 累加器 Accumulator

scala future 实例

Scala 柯里化 Currying

scala 方法和函数的区别

scala 学的走火入魔