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不应该堵塞它运行的线程。
更多可见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模型的区别相关推荐
- 高速互联仿真-Spice模型和IBIS模型的区别
Spice模型的特点总结. Spice模型是进行电路级仿真的.电流,电压,电容等节点的具体参数是从元器件图形.材料特性得来,是建立在低级数据的基础上,每个BUFFER中的元器件分别被描述和仿真. 仿真 ...
- 软件测试V模型和W模型的区别
一:V模型 V模型的优缺点(测试重点) (1)优点: 包含了底层测试(单元测试)和高层测试(系统测试): 清楚的标识了开发和测试的各个阶段: 自上而下逐步求精,每个阶段分工明确,便于整体项目的把控. ...
- Logit模型和Logistic模型的区别
别人已经写好了,保存一下! https://zhuanlan.zhihu.com/p/30659982
- ologit模型与logit_Logit模型和Logistic模型有什么区别?
之前在<Logit究竟是个啥?--离散选择模型之三>一文中提过,Logit应该理解成Log-it,这里的it指的是Odds("胜率",等于P/1-P).一个Logit变 ...
- 基于 OData 模型和 JSON 模型的 SAP UI5 表格控件行项目的添加和删除实现
这是 Jerry 2021 年的第 62 篇文章,也是汪子熙公众号总共第 339 篇原创文章. 龟虽寿曹操神龟虽寿,犹有竟时:腾蛇乘雾,终为土灰.老骥伏枥,志在千里:烈士暮年,壮心不已.盈缩之期,不但 ...
- Reactor模型和Proactor模型:同步IO与异步IO
Table of Contents 服务端的线程模型 2种fd 3种事件 Reactor模型-同步I/O 1.单Reactor单线程模型 2.单Reactor多线程模型 3.主从Reactor多线程模 ...
- T5模型和GPT2模型初步对比
T5模型和GPT2模型初步对比 之前试着用GPT2模型训练了一个诗词对联生成程序(训练诗词生成模型). 这个周末初步试了一下用T5模型做同样的事,是想对比一下看看两个模型的区别. 这两种模型都是基于经 ...
- 机器学习笔记——3 logistic模型和probit模型基本原理,从哲学视角谈谈统一二者的潜变量模型
logistic模型和probit模型基本原理,从哲学视角谈谈统一二者的潜变量模型 监督学习的两种类别 在监督学习中,根据标签值的类型可以将其分为两类: 一类是定量数据,其分为计量型和计数型,这种可以 ...
- 彻底搞懂Reactor模型和Proactor模型
在高性能的I/O设计中,有两个著名的模型:Reactor模型和Proactor模型,其中Reactor模型用于同步I/O,而Proactor模型运用于异步I/O操作. 服务端的线程模型 无论是Reac ...
最新文章
- 解决ros安装 使用roscore命令测试问题
- 对现有代码的分析方法随想
- 检测 SAP Spartacus 服务器端渲染页面响应时间的两种办法
- setTimeout详解
- 不懂 ZooKeeper?没关系,这一篇给你讲的明明白白
- mac nginx映射ip和端口_步骤四、nginx反向代理
- linux 做磁盘配额
- ajax里的data的用法,Jquery中ajax方法data参数的用法
- 报错command line option ‘-std=c11‘ is valid for C/ObjC but not for C++
- python字典找相同值_python-找出字典dic中重复值
- CentOS-6.3安装配置Tomcat-7 - Constantin - 博客园
- 开展网络口碑营销的前提
- 如何离线加载全国2.48TB天地图
- Linux之用户和权限
- Java中多态的表现形式
- 机器学习——不可逆矩阵处理
- 批处理修改计算机名为ip,批处理修改计算机名和IP地址
- 深度解析名企项目研发管理成功之路
- HTTPS学习笔记:(3)一文彻底了解PKI与证书
- 暖通空调的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
热门文章
- mysql获取上月26号_根据当前时间查询上月26号的日期 本月月25号的日期
- Pythton学习笔记1
- 如何在谷歌地图自定义范围_如何在Google表格中更改和创建自定义数字格式
- C++学习笔记:三种智能指针【Share、Unique、Weak】【Cherno】
- 【LeetCode每日一题】——1042.不邻接植花
- 区块链开发中使用最流行的编程语言
- Ae效果控件快速参考:抠像
- 微信小程序 五 npm 包 、安装 vant组件、promise组件、全局数据共享、 分包!!!、自定义 tabBar 案例
- 北航计算机学院教授马帅,北航离散数学大一课件(马帅)指南.pdf
- MinIO集群怎么接入Prometheus监控?(上)