引用至:http://www.jdon.com/concurrent/actor-csp.html

Akka/Erlang的actor模型与Go语言的协程Goroutine与通道Channel代表的CSP(Communicating Sequential Processes)模型有什么区别呢?

  首先这两者都是并发模型的解决方案,我们看看Actor和Channel这两个方案的不同:

Actor模型

  在Actor模型中,主角是Actor,类似一种worker,Actor彼此之间直接发送消息,不需要经过什么中介,消息是异步发送和处理的:

  Actor模型描述了一组为了避免并发编程的常见问题的公理:

  1.所有Actor状态是Actor本地的,外部无法访问。
  2.Actor必须只有通过消息传递进行通信。  
  3.一个Actor可以响应消息:推出新Actor,改变其内部状态,或将消息发送到一个或多个其他参与者。
  4.Actor可能会堵塞自己,但Actor不应该堵塞它运行的线程。

  更多可见Actor模型专题

Channel模型

  Channel模型中,worker之间不直接彼此联系,而是通过不同channel进行消息发布和侦听。消息的发送者和接收者之间通过Channel松耦合,发送者不知道自己消息被哪个接收者消费了,接收者也不知道是哪个发送者发送的消息。

  Go语言的CSP模型是由协程Goroutine与通道Channel实现:

  • Go协程goroutine: 是一种轻量线程,它不是操作系统的线程,而是将一个操作系统线程分段使用,通过调度器实现协作式调度。是一种绿色线程,微线程,它与Coroutine协程也有区别,能够在发现堵塞后启动新的微线程。
  • 通道channel: 类似Unix的Pipe,用于协程之间通讯和同步。协程之间虽然解耦,但是它们和Channel有着耦合。

Actor模型和CSP区别

  Actor模型和CSP区别图如下:

  Actor之间直接通讯,而CSP是通过Channel通讯,在耦合度上两者是有区别的,后者更加松耦合。

  同时,它们都是描述独立的进程通过消息传递进行通信。主要的区别在于:在CSP消息交换是同步的(即两个进程的执行"接触点"的,在此他们交换消息),而Actor模型是完全解耦的,可以在任意的时间将消息发送给任何未经证实的接受者。由于Actor享有更大的相互独立,因为他可以根据自己的状态选择处理哪个传入消息。自主性更大些。

  在Go语言中为了不堵塞进程,程序员必须检查不同的传入消息,以便预见确保正确的顺序。CSP好处是Channel不需要缓冲消息,而Actor理论上需要一个无限大小的邮箱作为消息缓冲。

最新文章

  1. IKAnalyzer
  2. 【原】Spark之机器学习(Python版)(二)——分类
  3. Android 图片上传
  4. c# windows编程控件学习-2
  5. Gatling->次时代性能测试利器
  6. ShortestPath:Wormholes(POJ 3259)
  7. Java内存区域分配基恩内存溢出异常
  8. [原]POJ1141 Brackets Sequence (dp动态规划,递归)
  9. web项目自动化测试方案预研
  10. Spring入门(8)-基于Java配置而不是XML
  11. Java_eclipse软件与git配合使用创建git仓库
  12. Linux下查看进程(程序)启动时的环境变量
  13. SQL查询多行合并成一行
  14. Quiz 6a Question 7————An Introduction to Interactive Programming in Python
  15. spring4.1+springmvc4.1+mybatis3.2.8+spring-security3.2.5集成环境建设
  16. AndroidManifest:VersionCode和VersionName
  17. oracle导入时提示IMP-00010:不是有效的导出文件,头部验证失败
  18. linux环境下根据文件的某一列进行去重
  19. 使用parcel打造一个零配置的react工作流
  20. Oauth2手册 第一章

热门文章

  1. 今天通过npm 安装 install 的时候出现的问题
  2. 初识SqlLite ---.net连接数据库
  3. 【Spring】11、Spring事务管理
  4. 关于模板引擎handlebars.js基本用法
  5. vue选中与取消简单实现
  6. ORM&MySQL
  7. vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效解决方法
  8. 关于input的焦点事件
  9. Sharepoint 2013 Gatherer 数据库的架构版本低于此 Gatherer 应用程序支持的向后兼容的最低架构版本
  10. Tsung CentOS 操作系统下搭建tsung性能测试环境_Part 1