半同步/半异步模式,半同步半反应堆reactor模式

本文介绍了事件处理模式中的Reactors和Proactors,以及并发模型中的半同步/半异步模式。Reactors使用同步IO,而Proactors利用异步IO。文中探讨了如何通过同步IO模拟Proactor模式,并讨论了全异步和全同步模式。此外,还阐述了半同步半异步模式,其中同步线程处理客户逻辑,异步线程处理IO事件,通过不同方式实现线程间交互。
摘要由CSDN通过智能技术生成

前言

看游双的书并理解,个人学习,有错麻烦提一下,感谢

事件处理模式和并发模型的区别

这篇要介绍的事件处理模式有reactor和proactor;而要介绍的并发模型有半同步/反应堆和半同步半异步

事件处理模式,指的是...TODO

事件处理模式

事件处理模式,本文介绍的有两种,是reactor(反应堆)和proactor模式,(还有没有其他的呢?)

同步IO模型用于实现reactor模式,异步IO模型用于实现proactor模式

异步IO比如有POSIX的 AIO和linux下原生的libaio, 同步IO的例子则是我们平常使用的read和write(见参考资料[2])

同步IO比如我们用的read,调用后让操作系统把数据从内核缓冲区搬到用户态中read的参数中,这里是从调用到read返回要等数据出来,

而异步IO,在参考资料[2]中提到select和poll也可以作为异步IO一部分,这些工作在调用异步IO的注册函数后,内核自己把数据拉取出来后,select或者poll返回通知用户,这期间不占用用户的CPU;拉取数据过程不占用CPU时间,当select或poll返回后直接就有了用户态的数据,而不需要再自己拉取回来(参考资料[3]),可以看出优点是省时,但是缺点是,由上述可知,编程起来比同步IO更复杂

从上面的描述可以看出,同步IO是阻塞IO,异步IO是非阻塞IO

reactor

reactor模式的定义,在游双的书中是这么说的:IO线程(主线程)只监听事件(如epoll_wait)和有事件则通知工作线程,而工作线程负责除此之外所有工作,入读写数据(read,write),接受连接(accept),处理请求(处理发来的数据等)

参考资料6提到是种编程模有以下三种角色:

Reactor 将I/O事件分派给对应的Handler; Acceptor 处理客户端新连接,并分派请求到处理器链中; 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值