#前置き
Node.jsでよく出てくる言葉であるイベントループとは何か?ということについて調べました。
Node.jsそのもののイベントループに関してではなく、一般的にいうイベントループとは何か、ということについてこの記事では書いてあります。
#フロー駆動型プログラムとイベント駆動型プログラムの違い
###フロー駆動型プログラム
- プログラムは上から下へ実行される
- フローを記述することになるので,フロー駆動型プログラムと呼ばれる
###イベント駆動型プログラム
- イベントに対して,実行される内容が変化するプログラムをイベント駆動型プログラムと呼ぶ
- フローの代わりにイベントに応じたコードを書く
- プログラムに必要なことは,イベントの監視とそのイベントの処理
- イベントの監視と動作内容をあわせて,イベントハンドラと呼ぶ
#イベントループ
- イベントを待機するループを持つ仕組み
- イベントループ内にイベントディスパッチャを持つ構造が一般的
- イベントはイベントキューに入れられて,古いイベントから順に取り出される
- 取り出されたイベントに対応する処理を行う
- プログラム中では,イベントに対応する処理は,コールバック関数を使って記述する.
- プログラムは,イベントに対する処理内容をコールバック関数で動作した後,イベントループと呼ばれる無限ループに動作が移る
- この無限ループで,イベントの監視と,それに対応する処理を永遠行う
#用語補足
##イベント
簡単な例を挙げると、マウスクリックなどのプログラム外から発生するアクションのことです。
イベント (英: event) とは、コンピュータ・プログラムの実行に際し、(プロセス間で共有するイベントカウンタのインスタンスが条件を満たしたときなど)何らかのアクションが発生した際にプログラムに発信される信号(これをメッセージと呼んだりする)をいう。
- イベント (プログラミング)(Wikipedia)
##イベントキュー
複数のイベントが連続して発生した場合に、それらのイベントを待ち行列として保持するデータ構造。イベントの発生間隔が短く、次のイベントが発生するまでにイベントハンドラの処理が間に合わない場合にバッファとして用いられる。
- イベント駆動型プログラミング(Wikipedia)
##イベントディスパッチャ
発生したイベントをイベントハンドラに振り分ける機能のこと
- イベント駆動型プログラミング(Wikipedia)
##コールバック関数
###コールバックとは
「コールバック」というのは英語の「callback」そのままですが、これは直訳すると「呼び戻す」とか「折り返し電話する」とかいうような意味のようです。
プログラミングの文脈で言う「コール」というのはもちろん電話のことではありません。
「コール」とは「(ある処理を)呼び出す行為」のことですよね。
「コールバック」というのは言葉の意味としては「(呼び出された側から呼び出した側を)呼び出し返す行為」ということになります。
###呼び出し返す
ここで「呼び出し返す」という言葉に注目してください
「呼び出し返す」とはつまり「(関数を)呼び出し返す」ということです。
この「呼び出し返される関数」のことを「コールバック関数」と言います
- コールバックの薦め