Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我们知道:
(1) epoll 是同步的,基于用户查询/系统通知。while 循环用于调用所有唤醒的 fd。
(2) boost::asio 声明自己是“异步的”,但它在linux上的实现是使用epoll。
我的问题是:如何使用“syn”系统调用来实现“asyn”?除非你使用一些内核/系统支持的 aio 接口,对吧?
请帮助纠正我的困惑。谢谢!
“同步”通常是指在完成之前不会将控制权返回给调用者的操作。
epoll是同步的,因为它的操作(返回带有待处理完成/动作的 fds)在它返回时已经完成。
epoll
然而,读取或写入套接字仍然是异步的,因为当函数调用返回时读取或写入的操作仍未完成。实际的 I/O 工作可能是异步完成epoll的,并会告诉您何时完成。无论您是否以及何时调用epoll,epoll都将执行工作,这只是向您发出完成信号的机制,而不是执行工作的函数。