前言
看游双的书并理解,个人学习,有错麻烦提一下,感谢
事件处理模式和并发模型的区别
这篇要介绍的事件处理模式有reactor和proactor;而要介绍的并发模型有半同步/反应堆和半同步半异步
事件处理模式,指的是...TODO
事件处理模式
事件处理模式,本文介绍的有两种,是reactor(反应堆)和proactor模式,(还有没有其他的呢?)
同步IO模型用于实现reactor模式,异步IO模型用于实现proactor模式
异步IO比如有POSIX的 AIO和linux下原生的libaio, 同步IO的例子则是我们平常使用的read和write(见参考资料[2])
同步IO比如我们用的read,调用后让操作系统把数据从内核缓冲区搬到用户态中read的参数中,这里是从调用到read返回要等数据出来,
而异步IO,在参考资料[2]中提到select和poll也可以作为异步IO一部分,这些工作在调用异步IO的注册函数后,内核自己把数据拉取出来后,select或者poll返回通知用户,这期间不占用用户的CPU;拉取数据过程不占用CPU时间,当select或poll返回后直接就有了用户态的数据,而不需要再自己拉取回来(参考资料[3]),可以看出优点是省时,但是缺点是,由上述可知,编程起来比同步IO更复杂
从上面的描述可以看出,同步IO是阻塞IO,异步IO是非阻塞IO
reactor
reactor模式的定义,在游双的书中是这么说的:IO线程(主线程)只监听事件(如epoll_wait)和有事件则通知工作线程,而工作线程负责除此之外所有工作,入读写数据(read,write),接受连接(accept),处理请求(处理发来的数据等)
参考资料6提到是种编程模有以下三种角色:
Reactor 将I/O事件分派给对应的Handler; Acceptor 处理客户端新连接,并分派请求到处理器链中;