0

我们知道:

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

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

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

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

4

1 回答 1

2

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

epoll是同步的,因为它的操作(返回带有待处理完成/动作的 fds)在它返回时已经完成。

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

于 2017-02-04T17:37:58.847 回答