Actor模型和CSP模型的区别

  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不应该堵塞它运行的线程。

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理论上需要一个无限大小的邮箱作为消息缓冲。

本文分享自微信公众号 - 物流IT圈(exiter18)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据挖掘

win10-golang环境变量设置

54630
来自专栏月牙寂

beego/cache源码分析---典型的工厂模式

版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转...

17130
来自专栏月牙寂

开源代码protoactor-go源码分析-async schedule

版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转...

12630
来自专栏月牙寂

leaf源码分析(二)----skeleton

版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转...

14850
来自专栏月牙寂

leaf源码分析(一)----chanrpc

版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转...

16850
来自专栏VRPinea

6.21 VR扫描:Facebook公布OC6召开日期;《哈利波特:巫师联盟》正式上线

今日,Facebook旗下子公司Oculus宣布2019年度的开发者大会Oculus Connect 6,将于今年9月25日至26日,在美国圣何塞的McEner...

12030
来自专栏月牙寂

leaf源码分析(四)----console和module

版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转...

9010
来自专栏月牙寂

Go标准库plugin源码分析----动态库使用

版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转...

9530
来自专栏月牙寂

开源代码protoactor-go[e866f39]源码分析

版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转...

16340
来自专栏数据挖掘

pycharm基本设置

Settings->Editor->Colors & Fonts->Scheme->WarmNeon code

34540

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励