この時代にポーリングを使用する例:
- 電子メール クライアントは、新しいメッセージをポーリングします (IMAP を使用している場合でも)。
- RSS リーダーは、フィードの変更をポーリングします。
- 検索エンジンは、インデックスを作成したページへの変更をポーリングします。
- StackOverflow ユーザーは、「更新」を押して、新しい質問をポーリングします ;-)
- Bittorrent クライアントは、群れの変化についてトラッカーをポーリングします (そして、DHT を使用して相互にポーリングします)。
- マルチコア システムでのスピンロックは、遅延が短すぎてこのコアで別のスレッドをスケジュールする時間がない場合に、コア間の最も効率的な同期になる可能性があります。
非同期通知を取得する方法がない場合もあります。たとえば、RSS をプッシュ システムに置き換えるには、サーバーはフィードを読むすべてのユーザーを認識し、それらに連絡する方法を用意する必要があります。これはメーリング リストです。まさに、RSS が避けるように設計されたものの 1 つです。したがって、私の例のほとんどはネットワーク アプリであり、これが問題になる可能性が最も高いという事実です。
また、非同期通知がある場合でも、ポーリングは十分に安価に機能する場合があります。
ローカル ファイルの場合、原則として、変更の通知がより適切なオプションである可能性があります。たとえば、ディスクを永遠に突っついている場合は、ディスクのスピンダウンを防ぐことができますが、OS がキャッシュする可能性があります。また、1 時間に 1 回しか変更されないファイルを毎秒ポーリングしている場合、マシンの処理能力の 0.001% (またはそれ以上) を不必要に占有している可能性があります。これは小さいように思えますが、ポーリングする必要があるファイルが 100,000 個ある場合はどうなるでしょうか?
ただし、実際には、どちらを行ってもオーバーヘッドは無視できる可能性が高いため、現在機能しているコードを変更することに興奮するのは困難です。最善の方法は、変更したいシステムでポーリングが引き起こす特定の問題に注意することです。何かが見つかった場合は、すべてのポーリングに対して一般的な議論をしようとするのではなく、問題を提起してください。何も見つからない場合、壊れていないものを修正することはできません...