上文说到operation这个类很神奇,这里就直接看源码了,他其实是一个typedef 定义,typedef task_io_service_operation operation;看下 task_io_service_operation实现就知道,他其实就是用来调用回调函数用的,最重要的操作就是在构造函数里面传递进来的回调函数,当调用complete 的 时候执行回调函数,这里重点说下他的子类,这里直说最重要的两个子类:epoll_reactor::descriptor_state : operation 和reactor_op::operation
其中reactor_op 又是所有io操作函数的父类,举个例子:
class reactive_socket_accept_op_base : public reactor_op。
这里重点说下operation子类的两个回调函数,用于io操作的 perform函数和用于执行用户回调函数的 complete函数,先来看下各个回调函数的初始化:
epoll_reactor::descriptor_state 就是 当有fd就绪的时候,就会调用上文中说过的 base_implementation_type里面的 reactor_data_ 成员的 complete函数进行处理
在linux下其实就是epoll_reactor::descriptor_state,那就看下这个类的构造函数: