前驱模式(Proactor)是一种事件处理的软件设计模式,其中长时间运行的活动在异步部分中运行。当异步部分完成后调用相应的处理程序。
同步和异步
同步和异步是针对应用程序和内核的交互而言的。
同步:用户进程触发IO操作后,等待或者轮询查看IO操作是否完成。
异步:用户进程触发IO操作后,继续自己的工作,当IO操作完成后,用户进程会得到通知(执行一些操作)。
模型
这是一个简单的前驱模式的模型。
首先,主线程向线程池提交若干任务,线程池分配线程去处理这些任务,当某个任务处理完成后,将结果存入缓存区中,并通知该任务的处理程序去处理结果。
boost.asio
boost.asio中运用了前驱模式,封装了操作系统的select
,poll
,epoll
,kqueue
等机制,实现了异步I/O模型。
主线程调用相应异步操作函数向内核注册socket上的事件,并告诉内核数据缓存区的位置。当socket上的数据存入数据缓存区或者数据缓存区的数据被写入socket后,内核通知应用程序执行相应的操作。