打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
关于Actor模型,CSP模型,Reactor模型,Proactor模型


LUK流2020-02-22 21:17:11
分类专栏: netty
最后发布:2020-02-22 21:17:11首次发布:2020-02-22 21:17:11
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
版权

1. Actor模型

传统的并发模型主要由两种实现的形式,一是同一个进程下,多个线程天然的共享内存,由程序对读写做同步控制(有锁或无锁). 二是多个进程通过进程间通讯或者内存映射实现数据的同步.

Actors模型更多的使用消息机制来实现并发,目标是让开发者不再考虑线程这种东西,每个Actor最多同时只能进行一样工作,Actor内部可以有自己的变量和数据.

在Actors模型中,每个Actor都有一个专属的命名”邮箱”, 其他Actor可以随时选择一个Actor通过邮箱收发数据,对于“邮箱”的维护,通常是使用发布订阅的机制实现的,比如我们可以定义发布者是自己,订阅者可以是某个Socket接口,另外的消息总线或者直接是目标Actor.

总结:Actor模型解决了并发问题。

参考文献:
https://cppfans.org/2176.html
https://www.jdon.com/concurrent/actor-csp.html

2. CSP模型

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


总结:CSP比Actor解耦程度高

个人感觉CSP着这种模型的Channel似乎和Netty的Channel有着相似之处,但是查阅不到相关的资料。欢迎了解这一块同学提出宝贵见解

3. Reactor模型

大概就是连接客户端和处理客户端任务之间有一个select去对接。(具体可以自行了解以下select模型)

参考文献:
https://juejin.im/post/5cc1c3156fb9a0322b5bfe86

4. Proactor模型

也就是我们不必等待I/O数据准备好也就是内核缓存已经读数据到用户空间。这一切都有内核来帮我们搞定,数据准备好了之后就通知Proactor,然后Proactor就调用相应的Handler进行业务处理。相对于Reactor省去了遍历事件通知队列selector 的代价。

个人感觉有点像响应式代替了select的轮询

所以理论上Proactor的效率比Reactor高,但是linux并没有真正的实现Proactor模型,而是epoll模拟出Proactor模型。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
那些常见的并发模型相关知识
网络编程的基本概念
IO模型图解
Reactor模型与Proactor模型
Java NIO浅析
TICS:秘密运行的大脑预测功能:大脑自发活动意义何在?(下)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服