前几天在看代码的时候上网上网找了关于异步proactor 执行流程的分析,在windows下面到有几篇不错的博文,但是在linux下面几乎没有很详细的介绍,现在看完了,写一下自己在看的过程中的疑惑和自己的分析,希望对大家学习有帮助。
在看asio之前先提几个问题:
1 异步的执行流程到底是怎样的?从用户发起操作到执行自己的完成回调函数,中间发生了什么?
2 proactor模式到底是怎么实现的呢?
3 都说run函数会在任务数为0的时候会退出循环,到底是怎么控制的?
4 run在多线程里执行的时候,到底是怎么随机分配任务的?
带着这几个问题,我们进入源码的世界,哈哈,此时边喝啤酒边写。首先先来看几个类型的定义,只有搞清楚每一个类型在linux下面到底是什么具体的类型,才好跟踪代码,下面以tcp 异步accept调用来进行分析:在应用层代码里最上层的类为
typedef basic_socket_acceptor<tcp> acceptor;
而basic_socket_acceptor 继承自 basic_io_object,在basic_io_object是一个模板类,传递给他的模板参数就是
socket_acceptor_service<Protocol>, 继续看basic_io_object这个模板类,它里面有最重要的两个成员,后面的所有操作几乎都要用到这两个成员:
typedef IoObjectService service_type;
typedef typename service_type::implementation_type implementation_type;
我们知道传递进来的