![计算机如何实现回调?](https://linux22.com/image/149759/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E5%9B%9E%E8%B0%83%EF%BC%9F.png)
我已经知道回调的一般用法了。首先,我注册一个“回调函数”,当某些事件发生时,该函数将被触发(被执行)。让我困惑的是我如何知道该事件是否发生?我能得到的解决方案是轮询。是否有更好的方法来检查事件是否在 O(n) 时间内发生?
好吧,也许上面的问题太抽象了。更现实的描述是 epoll_wait() 是否避免使用 O(n) 时间来检查文件描述符是否就绪?
如果是的话,它是如何做到的?是否存在与轮询本质上不同的回调机制?
答案1
在典型的事件驱动接口中,回调函数不会轮询以等待事件。它只是让事件管理者知道。在一个简单的实现中,一个对象将有一组与其关联的事件,并且该对象的每个事件将有一个函数指针(或其列表),当处理该事件时将调用该函数指针。