gigglesun 发表于 2014-04-22 07:49

Linux下,Boost.Asio是如何通过epoll做到异步IO的

背景:
epoll的实现是基于回调的,如果fd有期望的事件发生就通过回调函数将其加入epoll就绪队列中,用户针对该队列中的文件句柄发起相应操作,如read等,此时数据真正才会开始从内核buffer写入应用buffer中,整个过程是一种同步IO。而Boost.Asio采用Proactor模式实现了异步IO,也就是说用户在发起async_read后,可以去进行其它操作,内核将数据从内核buffer写入应用buffer,最后会通知其数据已经拷贝完毕。
问题:
Boost.Asio在Linux下封装epoll这种同步接口是如何做到异步IO的。看了源代码,有async_read,但没有看出其中的奥妙,请高手指点,谢谢

gigglesun 发表于 2014-04-22 11:31

Linux下采用 task_io_service来完成了相关的操作
参考:http://www.cnblogs.com/hello-leo/archive/2011/04/12/leo.html

linux_c_py_php 发表于 2014-04-23 12:49

把操作通过队列交给epoll线程就可以了。

yulihua49 发表于 2015-02-27 10:02

linux_c_py_php 发表于 2014-04-23 12:49 static/image/common/back.gif
把操作通过队列交给epoll线程就可以了。
可以通过eventfd把aio与epoll结合起来。
页: [1]
查看完整版本: Linux下,Boost.Asio是如何通过epoll做到异步IO的