ACE之ACE_Reactor_Notify
简介
ACE_Reactor_Notify作为Reactor的实现类ACE_Reactor_Impl内部通知来唤醒eventloop
抽象
ACE_Notification_Buffer
:作为缓存,连接调用线程和reactor线程
实现
不同的io复用机制有不同的实现
ACE_Dev_Poll_Reactor_Notify
:是epoll和devpoll的实现
ACE_Select_Reactor_Notify
:是select的实现
ACE_WFMO_Reactor_Notify
:是windows平台wfmo的实现
ACE_Dev_Poll_Reactor_Notify
open
:
- 赋值dp_reactor_
- 开启管道notification_pipe_,并且设置管道读写端的属性close-on-exec
- 开启通道队列notification_queue_,预分配内存,设置管道的读写端属性非阻塞
close
:
- 管道notification_pipe_预分配内存的释放
- 管道关闭
notify
:对于开启了队列的通过事件处理器以及事件类型构造ACE_Notification_Buffer
添加到管道队列中,向管道写端写入数据唤醒读端,没有开启队列的直接向管道写端写入数据
dispatch_notifications
:不做任何操作
notify_handle
:管道的读端句柄
is_dispatchable
:不做任何操作
dispatch_notify
:根据ACE_Notification_Buffer
的事件类型调用handler的指定方法
read_notify_pipe
:对于开启了队列,从队列中取出ACE_Notification_Buffer
,如果队列中还有,则向写端写入数据唤醒读端;对于 没有开启队列,直接从管道读取
purge_pending_notifications
:对于开启管道队列的,清空管道队列中未处理的数据
ACE_Select_Reactor_Notify
数据成员与ACE_Dev_Poll_Reactor_Notify类似,方法说明就不细说
open
:差异将管道读端句柄添加到select_reactor_
中,而ACE_Dev_Poll_Reactor_Notify是在ACE_Dev_Poll_Reactor
的open
时添加到reactor中
dispatch_notifications
:如果rd_mask
句柄集中包含管道的句柄,则事件数减小,清除句柄集中管道句柄,调用handle_input
dispatch_notify
:对于开启了队列的,从队列中取出数据,如果队列中还有数据,则向写端写数据唤醒读端
is_dispatchable
:检查ACE_Notification_Buffer是否有事件处理器
ACE_WFMO_Reactor_Notify
open
:注册到wfmo_reactor
dispatch_notifications
:不做任何操作
get_handle
:wakeup_one_thread_
的句柄
dispatch_notify
:不做任何操作
read_notify_pipe
:不做任何操作
notify
:向message_queue_
队列中添加数据,使用wakeup_one_thread_
唤醒
handle_signal
:从队列中取出事件作处理