減らして、内部バッファなし状態に設定してあります。変化させながら計測してみましょう。して計測した結果が以下となります。回数が増え、処理速度が遅くなることがわかります。イベントの回数はおよそのイベントループの回数に相当します。形で呼び出すことで、読み込んだデータをそのまま受け渡すことができます。この関数の実装を簡略化したものが以下です。達した)という意味なので読み込みを一時停止します。イベントが発火します。これを受けとり、データ元の読み込みを再開します。大きく上回らないように調整しつつデータを流し続けるようになっているのです。達した回数、つまり読み込みを停止した回数がそのまま速度に影響していたのです。なかったらどうなるでしょうか。無視してデータを流し続けると、パイプ先ストリームの内部バッファが増え続けてメモリをどんどん圧迫していきます。流れるデータ量がとても多いとメモリ不足でプロセスが落ちてしまうかもしれません。下流の流量圧だったり、それをトリガーとした流量調整機能のことをバックプレッシャーと呼びます。ドキュメントにはこんな一文があります。関数)の鍵となるゴールは、許容できるレベルまでバッファリングを制限することで、データソースとデータ先の速度が違っても、メモリを圧迫しないようにすることである。上流からの流量が下流の処理速度を上回り詰まってしまうことは自然界でも見られます。下水の排水速度よりも雨量が上回ると下水から逆流し水が吹き上がります。工場などでは、パイプのガス圧力や水圧の上昇を防ぐために背圧弁(バックプレッシャーバルブ)が用いられています。スイッチングハブではイーサネット通信の輻輳を防ぐために同様のバックプレッシャー制御が採用されています。さいごにいかがでしたでしょうか。実現したいことのイメージが掴めたでしょうか。今回はバックプレッシャーに絞っての紹介となりました。関数・イベント群の説明、ストリームクラスを独自に拡張する方法などはまた機会があればご紹介したいと思います。活用事例はNode学園祭2016で発表した資料をご覧ください。前提に記載しています。JAPANでは情報技術を駆使して人々や社会の課題を一緒に解決していける方を募集しています。詳しくは採用情報をご覧ください。JAPANのサービス開発を支える技術やデザイン、文化を発信しています。Reserved.このページの先頭へ。