Reactor和Proactor本质区别在哪?

我理解的是Proactor不需要用户去调用阻塞读/写函数,比如read/write。
网络库会自动把它读到buffer里面,用户只需要去取buffer就可以了。

IO是同步和异步是他们之间差别的关键,请问我理解的是对的吗?

如果对的话?那么为什么很多人说libevent是Reactor,libevent明明是会把socket数据读到buffer中,当buffer到达一定水位的时候才调用用户的callback。这也是异步啊。

Thanks in advance !

阅读 7.5k
1 个回答

libevent的代码没有看过,我的理解,libevent是用IO多路复用接口来做监听事件的;那么使用epoll监听事件就是一个等待的过程,有事件来了之后再“做出反应”,做出的反应动作是在用户空间调用读数据操作,读完之后调用回调函数处理;这个读的过程是在用户空间中调用处理的,耗费的是用户空间的时间,并阻塞着;
而Proactor的IO是系统级实现,是在内核中完成,读的过程中,用户空间的函数可以继续处理,并没有阻塞;读完之后调用相应用户回调函数处理;

希望这篇文章对你有帮助:
http://segmentfault.com/a/1190000002715832

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏