我已经知道回调的一般用法。首先,我注册一个“回调函数”,当某些事件发生时,该函数将被触发(执行)。 让我感到困惑的是我如何知道事件是否发生?我可以得到的解决方案是轮询。是否有更好的方法来检查事件是否在少于O(n)的时间内发生?
好吧,也许上面的问题太抽象了。更现实的描述是epoll_wait是否避免使用O(n)时间来检查是否准备好文件描述符?
如果是,它是如何做到的? 有没有一种与轮询本质上不同的回调机制?
答案 0 :(得分:0)
通常(但不是唯一),在某些外围I / O设备通过引发硬件中断发出操作完成信号后,将调用回调。涉及诸如驱动程序中断处理程序,信号量,保护环更改,线程和进程上下文更改,消息组装/排队/请求/处理/调度等之类的一长串事情,然后可能导致您的回调被某个系统线程调用,或来自您自己的必须符合特定结构或约束的消息处理或信号处理线程。
所以不,轮询通常是不必要的,也是不必要的。