俺の報告

RoomClipを運営するエンジニアの日報(多分)です。

日報 #91 - イベント・ドリブンで与太話

寒くなりましたね。
体調を崩した”てい”で日報投稿せずにおりましたが、そうしていると本当にすぐ消えてしまうレベルのか弱いブログなので、できるだけ頑張って書いていきましょう。

さて本日の技術的な気付き。
AWSのLambdaがpreview状態になったのです。 色々なドキュメントを読むにつけても便利だなぁと思うわけです。
ということで、イベント・ドリブンについて。

イベント駆動の本質的な形ってなんでしょうか。

CPUレベルでもプログラムレベルでもそうですが、
イベント駆動型モデルはイベントループ(メッセージディスパッチャみたいの)を持つのが普通だと思います。
要は「ぐるぐるぐるぐる巡回して、イベントがトリガーされるのを確認し続けてる奴」ですね。 そのループってイベント駆動において必要な構造なんでしょうか。
多分違う気がしますよね。
んー…
人間の感覚器官、例えば舌(味覚)とかはどうでしょうか。
甘い成分が受容体みたいなのにすっぽりはまって化学反応だかなんだかがおきて、
神経伝達物質になるんでしょうね、きっと。
これはループ構造はもってなさそうです。
でもイベント駆動っぽく見えませんか。
もしそうだとすると、必ずしもループ構造はいらないっぽいですね。
「何かが待機していて、イベントを感受した時に処理が始まる」というより、 「イベントの発生が、何かの実行を促す」という方がやっぱりしっくりきますね。 逆に言うと「イベントが発生するまで何もしない」わけです。

それから、イベントを受け取って何でもいいから何か起きればイベント駆動なんでしょうか。
これも違う気がするんです。
んー…
例えばフリップフロップはどうでしょうか。
回路をループさせて状態を記憶するタイプのメモリ回路です。
コレは一見するとイベント駆動のようにみえます。
「外部からのイベントを待機している」わけですから。
でもフリップフロップは受けた電流をそのままグルグルさせるだけですよね。
これじゃぁイベント駆動とはいえない気がします。
単純に「空箱のなかにボールを入れた」みたいな話のように思えます。
「箱はボールが入るというイベントをずっと待機していた」なんておかしな話です。

こんな感じで僕は「イベント駆動型」の本質的な状態を掴みかねた感じでおります。
確かにフロー型とは本質的に違う気がするくせに、
明確に「何が違うか」を言い当てられないのです。
単純にプログラム(処理)の実行者が拡張されてる、みたいな程度論とか、
最初に実行されるのが「待機プロセス」であって、その待機プロセスそのものに終わりがなく、
随時イベントを受け取って、スレッドまたはスタック領域において個別の処理を実行するようなOSみたいな論理とか、
どれもなんかきれいな抽象化に失敗した感じがしてならないのです。

いやまぁ、
どうでもいいんだけど、、、
書くことないからって書き出しただけみたいなところもあるんだけど、、、
現場からは以上なんですけど、、、