接着昨天的Proactor模式介绍。
proactor模式将所有IO操作交给主线程和linux内核来处理,工作线程负责业务逻辑。异步IO实现这种模式的工作流程如下:
1)主线程使用aio_read函数注册socket读完成事件,提供用户接收数据的缓冲区地址以及读操作完成时如何通知应用程序(有信号等手段);
2)主线程继续处理其他逻辑;
3)当socket数据读入缓冲区后,内核通知应用程序(如发送一个信号);
4)应用程序通过信号处理函数选择一个工作线程进行业务逻辑处理,处理完成之后调用aio_write注册写完成事件,提供写的缓冲区地址以及通知应用程序的手段;
5)主线程继续处理其他逻辑;
6)写数据缓冲区接收完成数据以后,同样通知应用程序,然后应用程序选择一个工作线程处理后面的业务逻辑。
异步数据的读写具体请参考aio_read和aio_write函数,这种模式很类似windows的完成端口网络编程模型。
当然可以通过同步的手段模拟proactor模式,具体流程大家可以自己想想。
说完了事件处理模式,我们在继续看并发模式,并发的概念可以自己查询相关资料。
1.半同步/半异步
说明:这里同步和异步不同于读写函数同步和异步,这里的同步和异步主要指定是代码的执行过程和流程,同步大家都知道按照代码的逻辑执行,异步通常是通过事件或者信号等触发然后调用回调函