我理解的是Proactor不需要用户去调用阻塞读/写函数,比如read/write。
网络库会自动把它读到buffer里面,用户只需要去取buffer就可以了。
IO是同步和异步是他们之间差别的关键,请问我理解的是对的吗?
如果对的话?那么为什么很多人说libevent是Reactor,libevent明明是会把socket数据读到buffer中,当buffer到达一定水位的时候才调用用户的callback。这也是异步啊。
Thanks in advance !
我理解的是Proactor不需要用户去调用阻塞读/写函数,比如read/write。
网络库会自动把它读到buffer里面,用户只需要去取buffer就可以了。
IO是同步和异步是他们之间差别的关键,请问我理解的是对的吗?
如果对的话?那么为什么很多人说libevent是Reactor,libevent明明是会把socket数据读到buffer中,当buffer到达一定水位的时候才调用用户的callback。这也是异步啊。
Thanks in advance !
libevent的代码没有看过,我的理解,libevent是用IO多路复用接口来做监听事件的;那么使用epoll监听事件就是一个等待的过程,有事件来了之后再“做出反应”,做出的反应动作是在用户空间调用读数据操作,读完之后调用回调函数处理;这个读的过程是在用户空间中调用处理的,耗费的是用户空间的时间,并阻塞着;
而Proactor的IO是系统级实现,是在内核中完成,读的过程中,用户空间的函数可以继续处理,并没有阻塞;读完之后调用相应用户回调函数处理;
希望这篇文章对你有帮助:
http://segmentfault.com/a/1190000002715832