asio: FOLLOWER-LEADER模式

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只能是独立的
   */

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值