(具体的な実装についてはなるべく触れず、なんかイメージ的な話をする。)
- 「これこれのイベントが起こったら、この続く処理を実行してくれ」
- イベントの例
- 時間経過
- データが手に入ったら
- (GUI 系だと、ボタンがクリックされたら等)
- 続く処理とは
- コールバック関数
- この中で更に別のイベントの待受を指示されたりする
- イベントの例
- イベントの待ち受けや、コールバックの実行を行うのが event loop
- 複数のイベントをいっぺんに待ち受けることができる
- コールバックの実行は一つずつ
- コールバック実行が終わったら、またイベント待受に戻る
- 低レベルなイベントをベースとして、より高レベルなイベントを定義していく
- socket (fd) が読み書き可能になったら
- データが一行読み出せたら
- データを指定した byte 数読み出せたら
- HTTP レスポンスが返ったら
- ...
- HTTP レスポンスが返ったら
- socket (fd) が読み書き可能になったら
- コールバック関数の管理に使うもの
- コールバック関数を登録できる
- 登録されたコールバック関数をまとめて発火できる
- コールバック関数を受け取る代わりに、 future を返す
- コールバックを保持する代わりに、 future を保持する
- コールバックを呼び出す代わりに、 future に結果をセットする
- コールバック関数を渡す代わりに future を受け取る
- future にコールバック関数を登録する
- 途中で停止したり再開したりできるもの
- イベント駆動と組み合わせることで便利になる
- イベントを待ち受けるタイミングで停止する
- イベントが起こったら再開する
- イベントのコールバックとして、再開処理を呼んでもらう