现在的位置: 首页 > 综合 > 正文

asio: FOLLOWER-LEADER模式

2013年09月03日 ⁄ 综合 ⁄ 共 602字 ⁄ 字号 评论关闭

BOOST 的EPOLL封装,采用了所谓的领导者追随者模式。

我们知道EPOLL_WAIT是不能多线程调用的;

ASIO为了在LINUX下模拟PROACTOR模式,用应用层的数据结构模仿了WINDOWS系统给IOCP实现的完成包队列,

以及IO请求包;

为了模拟IOCP多个工作者线程调用GETQUEUEDCOMPLETEDSTATUS,

由于无法并发EPOLL_WAIT,采用了领导追随模式,做了个大概的模拟。

怎么给人的感觉是为了PROACTOR而PROACTOR呢?

本身LINUX SOCKET就不支持这些。

另外还有一个问题,

ASIO允许应用层向EPOLL投递多个RECV请求;

这让人非常疑惑。我相信IOCP的服务程序也极少有人会在同一个句柄上重复投递请求;

/* 比如说,可能有多个RECV请求,epoll_reactor::run按顺序处理请求
   有个疑问:请求的时候就不能指定 接收缓冲区地址了。
   (或者也可以指定,但感觉怪怪的:比如说两个RECV请求,每个指定读取10字节,所以第一个
   请求指定缓冲区地址为buf,buf+10, 第二个指定地址为buf+10, buf+20。
   假如第一个请求没有完全满足,只读取了5字节,那么怎么处理?)
   我始终觉得对于SERVER程序没有必要投递多个RECV请求
   不过按照BOOST作者的意图,每次投递的RECV请求所关联的BUFFER只能是独立的
   */

【上篇】
【下篇】

抱歉!评论已关闭.