为什么boost::aio基于epoll(synchronous)的实现是异步的
Why boost::aio is asynchronous when its implementation is based on epoll(synchronous)
我们知道:
(1)epoll是同步的,基于用户query/system通知。一个while循环用于调用所有唤醒的fds。
(2) boost::asio 声明自己是 "asynchronous",但它在 linux 上的实现是使用 epoll。
我的问题是:如何使用 "syn" 系统调用来实现 "asyn"?除非你使用一些 kernel/system 支持的 aio 接口,对吗?
请帮助纠正我的困惑。谢谢!
"synchronous" 通常是指在完成之前不会 return 将控制权交还给调用者的操作。
epoll
是同步的,因为它的操作(returning fds with pending completions/actions)在它 returns 时完成。
然而,从套接字读取或写入仍然是异步的,因为当函数调用 returns 时,读取或写入操作仍未完成。实际的 I/O 工作可能是异步完成的,epoll
会在完成时告诉您。无论您是否以及何时调用 epoll
,都会执行工作,epoll
只是向您发送完成信号的机制,而不是执行工作的函数。
我们知道:
(1)epoll是同步的,基于用户query/system通知。一个while循环用于调用所有唤醒的fds。
(2) boost::asio 声明自己是 "asynchronous",但它在 linux 上的实现是使用 epoll。
我的问题是:如何使用 "syn" 系统调用来实现 "asyn"?除非你使用一些 kernel/system 支持的 aio 接口,对吗?
请帮助纠正我的困惑。谢谢!
"synchronous" 通常是指在完成之前不会 return 将控制权交还给调用者的操作。
epoll
是同步的,因为它的操作(returning fds with pending completions/actions)在它 returns 时完成。
然而,从套接字读取或写入仍然是异步的,因为当函数调用 returns 时,读取或写入操作仍未完成。实际的 I/O 工作可能是异步完成的,epoll
会在完成时告诉您。无论您是否以及何时调用 epoll
,都会执行工作,epoll
只是向您发送完成信号的机制,而不是执行工作的函数。