2016年8月10日水曜日

IEnumerableとIObservableの違いについて


先に結論いいますと、

 ポーリングとコールバックの違い

です。

---ここから説明---

IEnumerableはポーリングでプログラムから任意のタイミングで状態確認しに行きます。

例えると、
 監視役Aさんが定期的に作業者Bを状態確認します。

プログラム的にいうと
 IEnumerator(Overver)がIEnumerable(Observable)の状態確認します。



IObservableはコールバックでイベント発信者が任意のタイミングで伝言ゲームのように通知します。

例えると、
 センサーAの変化イベントを全体に通知します。

プログラム的に言うと、
 IObservableがイベントのSubscribeしたユーザーに通知します。



Reactive(Rx)はイベント関数の中で全てのイベント条件をLinqで書き記すというやり方です。
従来通りのやり方だと、メインループがいて、定期的にイベントがあれば処理していくやり方です。

見えないところで処理するスレッドが「イベント発信者」、「メインループ」の違いがあるのですが、
Async/Awaitはこの点うまくできていてイベント関数を「async void」した時は別スレッドで実行させ、コールバックを待たずに投機的な実行をします。

なので、チャタリングなどが起きた場合は投機的なタスクが膨大に膨れ上がる事が予想されるので、注意ポイントになりそうです。

方向性が逆なのでどちらを主体にするかでシステム構造に合わせて実装するのが良いです。

フロントエンドはRx方式にしてバックエンドはメインループ方式というやり方もありますが、
学習コストと時間を見合うかのコスパ計算が必要です。

コメントを投稿

Androider