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

Actor模型和CSP模型的区别相关推荐

  1. 高速互联仿真-Spice模型和IBIS模型的区别

    Spice模型的特点总结. Spice模型是进行电路级仿真的.电流,电压,电容等节点的具体参数是从元器件图形.材料特性得来,是建立在低级数据的基础上,每个BUFFER中的元器件分别被描述和仿真. 仿真 ...

  2. 软件测试V模型和W模型的区别

    一:V模型 V模型的优缺点(测试重点) (1)优点: 包含了底层测试(单元测试)和高层测试(系统测试): 清楚的标识了开发和测试的各个阶段: 自上而下逐步求精,每个阶段分工明确,便于整体项目的把控. ...

  3. Logit模型和Logistic模型的区别

    别人已经写好了,保存一下! https://zhuanlan.zhihu.com/p/30659982

  4. ologit模型与logit_Logit模型和Logistic模型有什么区别?

    之前在<Logit究竟是个啥?--离散选择模型之三>一文中提过,Logit应该理解成Log-it,这里的it指的是Odds("胜率",等于P/1-P).一个Logit变 ...

  5. 基于 OData 模型和 JSON 模型的 SAP UI5 表格控件行项目的添加和删除实现

    这是 Jerry 2021 年的第 62 篇文章,也是汪子熙公众号总共第 339 篇原创文章. 龟虽寿曹操神龟虽寿,犹有竟时:腾蛇乘雾,终为土灰.老骥伏枥,志在千里:烈士暮年,壮心不已.盈缩之期,不但 ...

  6. Reactor模型和Proactor模型:同步IO与异步IO

    Table of Contents 服务端的线程模型 2种fd 3种事件 Reactor模型-同步I/O 1.单Reactor单线程模型 2.单Reactor多线程模型 3.主从Reactor多线程模 ...

  7. T5模型和GPT2模型初步对比

    T5模型和GPT2模型初步对比 之前试着用GPT2模型训练了一个诗词对联生成程序(训练诗词生成模型). 这个周末初步试了一下用T5模型做同样的事,是想对比一下看看两个模型的区别. 这两种模型都是基于经 ...

  8. 机器学习笔记——3 logistic模型和probit模型基本原理,从哲学视角谈谈统一二者的潜变量模型

    logistic模型和probit模型基本原理,从哲学视角谈谈统一二者的潜变量模型 监督学习的两种类别 在监督学习中,根据标签值的类型可以将其分为两类: 一类是定量数据,其分为计量型和计数型,这种可以 ...

  9. 彻底搞懂Reactor模型和Proactor模型

    在高性能的I/O设计中,有两个著名的模型:Reactor模型和Proactor模型,其中Reactor模型用于同步I/O,而Proactor模型运用于异步I/O操作. 服务端的线程模型 无论是Reac ...

最新文章

  1. 解决ros安装 使用roscore命令测试问题
  2. 对现有代码的分析方法随想
  3. 检测 SAP Spartacus 服务器端渲染页面响应时间的两种办法
  4. setTimeout详解
  5. 不懂 ZooKeeper?没关系,这一篇给你讲的明明白白
  6. mac nginx映射ip和端口_步骤四、nginx反向代理
  7. linux 做磁盘配额
  8. ajax里的data的用法,Jquery中ajax方法data参数的用法
  9. 报错command line option ‘-std=c11‘ is valid for C/ObjC but not for C++
  10. python字典找相同值_python-找出字典dic中重复值
  11. CentOS-6.3安装配置Tomcat-7 - Constantin - 博客园
  12. 开展网络口碑营销的前提
  13. 如何离线加载全国2.48TB天地图
  14. Linux之用户和权限
  15. Java中多态的表现形式
  16. 机器学习——不可逆矩阵处理
  17. 批处理修改计算机名为ip,批处理修改计算机名和IP地址
  18. 深度解析名企项目研发管理成功之路
  19. HTTPS学习笔记:(3)一文彻底了解PKI与证书
  20. 暖通空调的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告

热门文章

  1. mysql获取上月26号_根据当前时间查询上月26号的日期 本月月25号的日期
  2. Pythton学习笔记1
  3. 如何在谷歌地图自定义范围_如何在Google表格中更改和创建自定义数字格式
  4. C++学习笔记:三种智能指针【Share、Unique、Weak】【Cherno】
  5. 【LeetCode每日一题】——1042.不邻接植花
  6. 区块链开发中使用最流行的编程语言
  7. Ae效果控件快速参考:抠像
  8. 微信小程序 五 npm 包 、安装 vant组件、promise组件、全局数据共享、 分包!!!、自定义 tabBar 案例
  9. 北航计算机学院教授马帅,北航离散数学大一课件(马帅)指南.pdf
  10. MinIO集群怎么接入Prometheus监控?(上)