定義
ポーリングは、あるデバイスやプログラムが、ほかの相手に新しい知らせやデータがあるかどうかを、一定の時間間隔で繰り返し問い合わせて確認する方式です。相手から連絡が来なくても、自分から定期的に質問を投げかけて、最新の状態を保ちます。
「まだ着かない?」「今は?」また聞いちゃう
長距離のドライブで、後部座席の子どもが1分おきに「まだ着かない?」と聞いてくる場面を思い浮かべてください。運転する人は毎回「まだまだだよ」と答え、やっと到着したときに初めて「着いたよ」と伝えますよね。
パソコンやスマホの中のプログラムも、これと同じ方法で動いていることがよくあります。スマホのアプリがサーバーに向かって、新しいメッセージや通知が届いていないか、決まった間隔で休まず質問を投げかけ続けるのです。1秒や3秒のように間隔を決めておき、「新しいデータはある?」と確認し続けます。
このように、特定の機器やプログラムがほかの場所の状態を定期的にチェックする通信手法を「ポーリング(Polling)」と呼びます。仕組みがとても分かりやすく、作るのも簡単なので、電子機器やソフトウェアの初期から広く使われてきた基本の考え方です。
シンプルだけど、エネルギーをたくさん使います
ポーリングの良いところは、実装がとても簡単なことです。状態を尋ねる命令を一定時間ごとに実行するよう決めておくだけで、どんな環境でも手軽に動かせます。
ただし、何も変化がないときでも同じ質問を繰り返すため、コンピューターの資源と電力を無駄にしてしまいます。100回聞いても、99回は「何もないよ」という空振りの返事が返ってくるようなものです。その間、CPU(中央処理装置)やインターネットの通信回線が、無駄に疲れてしまいます。
知らせにすぐ気づけないという問題もあります。質問と質問のすき間に大事な出来事が起きても、次の質問の番が来るまではそれを知る方法がありません。確認の間隔を狭めすぎるとバッテリーが猛スピードで減り、広げると反応が遅くなるという悩ましいジレンマが生まれます。
もう少し正確に言うと:割り込み(インターラプト)とプッシュ
もう少し正確に言うと、現在のコンピューターシステムは、こうした非効率を減らすために「必要なときだけ知らせてもらう方式」も併用しています。自分が毎回ドアをノックする代わりに、知らせができたら相手のほうから先にチャイムを鳴らしてくれるイメージです。
コンピューターのハードウェア部品では、CPUがひとつひとつの部品を見張る代わりに、ネットワークカードにデータが届いたときや、ストレージが読み込みを終えたときに、部品がCPUに信号を送る方式がよく使われます。これを割り込み(インターラプト)と呼びます。ただし、USBキーボードやマウスは、コンピューター側のUSBコントローラーが1秒に数百〜数千回も問い合わせるポーリング方式で入力を受け取っています。
スマホアプリやWebブラウザでも同じです。チャットアプリがメッセージを待つとき、やみくもにサーバーをつつく代わりに、サーバーとの接続をつなぎっぱなしにしておくWebSocketやリアルタイムのプッシュ通知を活用します。おかげで機器はバッテリーを節約しながら、知らせをほぼ瞬時に受け取れるようになりました。
よくある誤解
ポーリングは非効率なので、今のコンピューターやWebではまったく使われていない。
シンプルさと安定性が求められる場面では、今でも使われています。たとえばハードウェアセンサーの細かな状態を読み取るときや、複雑な通信経路を作りにくい簡単な組み込み機器、バッチ処理などでは、ポーリングがもっとも安全で分かりやすい解決策になることもあります。
日常で出会う場面
飲食店の順番待ちアプリで、自分の番になったかどうかを確かめるために、10秒ごとにサーバーへ更新リクエストを送る場面です。
プリンターが印刷を終えたかどうかを、パソコンが定期的に信号を送って確認する方式です。
つまり ひとことで
ポーリングは、新しい知らせがあるかどうかを一定の間隔で自分から尋ねて、状態を確認する通信方式です。