PushシステムとPullシステムにおけるProducerの役割を考察する


戻り値の個数に基づいてオブジェクトを分類する


SINGLEMULTIPLEPullFunctionIteratorPushPromiseObservable

ProducerとConsumerの違い


PRODUCERCONSUMERPullPassive: produces data when requested.Active: decides when data is requested.PushActive: produces data at its own pace.Passive: reacts to received data.
Producerはデータの生産主体であり,Consumerはデータの使用主体である.我々がよく使う関数の観点から,呼び出し関数の呼び出し元はConsumer,呼び出し関数の呼び出し元はProducerといえる.
我々が通常使用しているPullシステムでは、Consumerはいつデータを受信するかを決定することができ、Producerは要求を受動的に受信し、データを生産するだけである.PromiseとObservableを用いたプッシュシステムでは,生産者は自分のニーズに応じてデータを生産し伝達することができ,Consumerはこれらのデータにしか反応しない.
理論的には受け入れられるが、具体的なコードはどのようなものなのだろうか.これはPullシステムにおける機能とPushシステムにおける観測可能性についての説明である.
まずFunctionを考慮すると,Consumerはいつデータを受信するかを決定することができ,Functionは要求されたデータしか生成できない.この部分は自然です.
しかしPushシステムでは観測不可能な理論は正しく応用されていない.コードの例を次に示します.
const observable = new Observable(function subscribe(subscriber) {
  subscriber.next(1);
})

observable.subscribe(x => console.log(x));
1つの値が1の観察可能な値を受信し、コンソールに出力するコード.私はこの部分にいます.
  • 「呼び出しと受信値の観点から、通常の関数呼び出しと区別はありませんか?」
  • 「どのような面でProducerがデータを自発的に生産しているのか?subscribe()メソッドのlazy pushは受動的ではないか?」
  • そう思うよ
    でもこれはすぐに、
    1.生産者と消費者の主体を明確にする
    2.subscribe()メソッドの役割をAPI Documentationから再度理解する.
    解決しました.

    Pushシステムにおける生産者と消費者の主体を観測可能


    さっきの例をもう一つ持ってきます.
    const observable = new Observable(function subscribe(subscriber) {
      subscriber.next(1);
    })
    
    observable.subscribe(x => console.log(x));
    この例では、私が意図的にコールバックをsubscribeと命名し、観察可能なジェネレータに転送したことを示します.私のsubscribe関数は生産データのProducerです.そして、observable.subscribe(x => console.log(x))によって伝達されるx => console.log(x)コールバック関数は、データを書き込むConsumerである.

    subscribe()メソッドの役割


    観測可能な関数に渡されるsubscribeコールバック関数はProducerだとさっき言いました.observable.subscribe()も方法subscribeを呼び出す.はい、これは同じです.正式な書類においても、実践的な目的のために、2つは同一であると考えられる.
    すなわち、observable.subscribe()を実行することは、Observableに伝達されるコールバック関数を実行することと一脈相承であり、これにより、モニタを介して直接実行してConsumerに自分の生産したデータを伝達する自然なリポジトリが形成される.
    https://rxjs.dev/api/index/class/Observable文書においても、subscribe()メソッドは、Observableを呼び出す実行を記述する.

    くさびを打つ


    観測可能なプッシュシステムでは,誰が生産者と消費者であるかを知ることで,我々の疑問をうまく解決した.しかし、「lazy computing」という部分は受動的な感じがまだ消えていない.
    だから、lazy = 수동という命題は急いで一般化された間違いだと改めて注意したいと思います.怠け者ですが、自発的な可能性が高いです.
    最後に、いくつかの余韻を残して終了する例を作成します.
    function passiveProducer() {
      setTimeout(() => {
        return 'seop'; // X. Already in Task Queue
      }, 5000);
      
      const producedValueJustPassively = 'seop';
      
      return producedValueJustPassively;
    }
    
    const value = passiveProducer();
    
    // -------------------------------------------------------------
    
    const lazyButActiveObservable = new Observable((subscriber) => {
    	setTimeout(() => {
          subscriber.next('seop');
        }, 5000);
    })
    
    lazyButActiveObservable.subscribe(x => console.log(`${x} value is absolutely emitted by Producer's own pace`))
    P.S.活動サイクルから担当の観察可能な...