为什么boost :: aio在其实现基于epoll(同步)时是异步的

时间:2017-02-04 11:05:13

标签: linux model kernel aio

我们知道:

(1)epoll是同步的,基于用户查询/系统通知。 while循环用于调用所有唤醒fds。

(2)boost :: asio声明自己是“异步”,但它在linux上的实现是使用epoll。

我的问题是:如何使用“syn”系统调用实现“asyn”?除非你使用一些内核/系统支持的aio接口,对吧?

请帮助纠正我的困惑。谢谢!

1 个答案:

答案 0 :(得分:1)

"同步"通常是指在完成之前不会将控制权返回给调用者的操作。

epoll是同步的,因为它的操作(返回带有挂起的完成/操作的fds)在它返回时就完成了。

读取或写入套接字但仍然是异步的,因为当函数调用返回时,读取或写入操作仍未完成。实际的I / O工作可能是异步完成的,epoll会告诉您何时完成。无论是否以及何时拨打epollepoll只是向您发出完成信号的机制,而不是执行工作的功能,将执行该工作。