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

Linux 为什么boost::aio的实现基于epoll(同步)时是异步的,linux,model,kernel,aio,Linux,Model,Kernel,Aio,我们知道: (1) epoll是同步的,基于用户查询/系统通知。while循环用于调用所有唤醒的FD (2) asio声明自己是“异步的”,但它在linux上的实现是使用epoll的 我的问题是:如何使用“syn”系统调用实现“asyn”?除非您使用一些内核/系统支持的aio接口,对吗 请帮我纠正我的困惑。谢谢 “synchronous”通常指在完成之前不会将控制权返回给调用方的操作 epoll是同步的,因为它的操作(返回带有挂起的完成/操作的FD)在返回时已完成 然而,从函数调用返回时,读取或

我们知道:

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

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

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

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

“synchronous”通常指在完成之前不会将控制权返回给调用方的操作

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

然而,从函数调用返回时,读取或写入套接字的操作仍然没有完成,从这个意义上讲,读取或写入套接字仍然是异步的。实际的I/O工作可以异步完成,
epoll
将告诉您何时完成。无论您何时调用
epoll
epoll
都将执行该工作,
epoll
只是向您发送完成信号的机制,而不是执行该工作的函数。

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

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


然而,从函数调用返回时,读取或写入套接字的操作仍然没有完成,从这个意义上讲,读取或写入套接字仍然是异步的。实际的I/O工作可以异步完成,
epoll
将告诉您何时完成。无论您何时调用
epoll
epoll
都将执行该工作,
epoll
只是向您发送完成信号的机制,而不是执行该工作的函数。

“实际的I/O工作是异步完成的”=>“实际的I/O工作可能是异步完成的”,您很好:)“实际I/O工作是异步完成的”=>“实际I/O工作可能是异步完成的”,您很好:)