ホームに戻る
出典 :
関連 :
目次 :
イベント駆動型プログラミング(Event-Driven Programming : イベントドリブン)とは
プログラムの起動とともにイベント(事象)を待機し、発生したイベントに従って 受動的に 処理を行うプログラミングパラダイムのこと。「シグナルプログラミング」とほぼ同義。
ポーリング(状態問い合わせ)ループを自前で実装し、プログラム(メインルーチン)が 能動的に 状態を確認するという方式では、
状態に関連づく処理はすべてメインルーチンにぶら下がることからメインルーチンが肥大化し、プログラムの見通しが悪くなる。
また、有意な処理を行っていない場合でもメインルーチンが駆動し続けるため、スループットや消費電力の面で不利となる。
しかしこれをイベント駆動型とすると、発生したイベントに関連づくイベントハンドラにのみ処理を記述すればよく、コードの記述量を減らせるとともに、
処理の記述はハンドラごとに分かれるためプログラムの見通しが良くなる。
特にユーザインタフェース(UI)を有するプログラムにおいては、「ボタンが押される」などのイベント発生タイミングはユーザ次第であるため、
イベントドリブンでなければ実装が困難、または不可能である。
割り込みを用いた処理も広義のイベントドリブンである。(但し、イベントの受理をハードウェアが担うかソフトウェアが担うかが異なる。)
イベント駆動型プログラミングの用語
イベント
「キーボードのキーが押された」「画面上のボタンが押された」「タイマが発火した」などの、
プログラムの流れ(メインルーチン)とは別に発生する「事象」および、その事象の発生を表す信号(シグナル)を指す。
割り込み処理における「割り込み」に相当。
イベントハンドラ
イベントが発生した際に実行するサブルーチン。発生したイベントの処理を担当する。「イベントフック」、「イベントリスナ」も同義。
割り込み処理における「割り込み(ベクタ)ハンドラ」、「割り込みサービスルーチン(ISR)」に相当。
イベントハンドラをメインルーチンの一部としない(文脈に依存させない)こと が重要。
トリガ
イベントを発生させる契機(きっかけ)。プログラム内部でイベントを起こすことを「イベントをトリガする」と表現することもある。
割り込み処理における割り込み「要因」(ウォッチドッグ、外部割り込み、低電圧etc…)に相当。
イベントディスパッチャ
発生したイベントをイベントハンドラに振り分ける機構。通常はOSの機能として実装されている。
割り込み処理における「(割り込み)ベクタテーブル」に相当。
イベントキュー
複数のイベントが連続して発生した際、それらを待ち行列(キュー)として保持するデータ構造。
あるイベントに対応するイベントハンドラの実行中に、次のイベントが発生した場合、キュー(バッファ)にイベントをプールしておくことで、遅延実行が可能となる。
「メッセージキュー」と同義。
イベントループ
イベントを待機するループを持つ機構。イベントループ内にディスパッチャを持つ構造が一般的である。「メッセージループ」、「メッセージポンプ」と同義。
イベントループ、イベントディスパッチャ、イベントキューはOSの機能を用いる場合と、自前で実装する場合がある。
自前で実装する場合は、イベントが発生していない間はタスクを「待ち状態」としておき、イベントの発生とともにタスクを起床してディスパッチを行う、とするとCPU資源の消費が少ない。「タスク(スレッド)間通信」を参照。
イベントドリブンはあくまで考え方である点に留意されたい。