我们知道:
(1)epoll是同步的,基于用户查询/系统通知。 while循环用于调用所有唤醒fds。
(2)boost :: asio声明自己是“异步”,但它在linux上的实现是使用epoll。
我的问题是:如何使用“syn”系统调用实现“asyn”?除非你使用一些内核/系统支持的aio接口,对吧?
请帮助纠正我的困惑。谢谢!
答案 0 :(得分:1)
"同步"通常是指在完成之前不会将控制权返回给调用者的操作。
epoll
是同步的,因为它的操作(返回带有挂起的完成/操作的fds)在它返回时就完成了。
读取或写入套接字但仍然是异步的,因为当函数调用返回时,读取或写入操作仍未完成。实际的I / O工作可能是异步完成的,epoll
会告诉您何时完成。无论是否以及何时拨打epoll
,epoll
只是向您发出完成信号的机制,而不是执行工作的功能,将执行该工作。