コンピュータはコールバックをどのように実装しますか?

コンピュータはコールバックをどのように実装しますか?

私はすでにコールバックの一般的な使い方を知っています。まず、特定のイベントが発生したときにトリガー(実行)される「コールバック関数」を登録します。私を混乱させるのは、この出来事が起こったかどうかを知ることができるということです。私が得ることができる解決策はポーリングです。 O(n)時にイベントが発生するかどうかを確認するより良い方法はありますか?

さて、おそらく上記の質問はあまりにも抽象的かもしれません。より現実的な説明は、epoll_wait()がファイル記述子が準備されていることを確認するためにO(n)時間を使用しないことです。

それではどうなりますか?ポーリングと本質的に異なるコールバックメカニズムはありますか?

答え1

一般的なイベントベースのインターフェイスでは、コールバック関数はイベントを待つためにポーリングしません。イベントマネージャにのみ通知します。単純な実装では、オブジェクトには関連するイベントセットがあり、そのオブジェクトの各イベントには、イベントが処理されたときに呼び出される関数ポインタ(またはそのリスト)があります。

関連情報