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