シンクを定義する2つのアプローチの違いは何ですか?[RandomCdr、Future将来[T]を返す関数collection.flatMap(_.insert[RandomCdr](false)(randomCdrWriter,ec).many(bulk)(ec))(ec)
はreactivemongoドライバマップ(T => Future [U])とflatMapConcat(T => Source.fromFuture(Future [U]))の間のストリーム間の相違
0
A
答えて
0
まずスニペットここ
各着信バルク、Future
に変換されるで
Flow[RandomCdr]
.grouped(bulkSize)
.flatMapConcat{ (bulk : Seq[RandomCdr]) =>
Source.fromFuture(collection.flatMap(_.insert[RandomCdr](false)(randomCdrWriter,ec).many(bulk)(ec))(ec))
}
.toMat(Sink.ignore)(Keep.right)
Flow[RandomCdr]
.grouped(bulkSize)
.map((bulk : Seq[RandomCdr]) => collection.flatMap(_.insert[RandomCdr](false)(randomCdrWriter,ec).many(bulk)(ec))(ec))
.toMat(Sink.ignore)(Keep.right)
を[完了] dはFuture
が提供する実行コンテキスト内で実行されると述べています。この時点でのみ、別のFuture
などを生成して次のバルクを処理します。
基本的に先物は順番に実行されます。これは、あなたが提供する実行コンテキスト内で実行されます
Flow[RandomCdr]
.grouped(bulkSize)
.mapAsync(parallelism = 1){ (bulk : Seq[RandomCdr]) =>
collection.flatMap(_.insert[RandomCdr](false)(randomCdrWriter,ec).many(bulk)(ec))(ec)
}
.toMat(Sink.ignore)(Keep.right)
セカンドスニペットここ
各着信バルクがFuture
に変換される、と行動が似ています。 Future
はすぐにSink.ignore
に渡され、その参照は破棄されます。
Future
が同時に実行される回数を制御することはできません。このため、この方法はお勧めしません。
改善された並列性を探している場合は、上記のようにmapAsync
を使用して、並列性パラメータを微調整してください。
関連する問題
- 1. <U、T extends U>と<T、U super T>は同じですか?
- 2. なぜ私の@Async Future <T>ブロック?
- 3. Bind const std :: pair <T, U>&std :: pairの値に<const T, U>
- 4. 機能1 [T、U] =>機能1 [T、オプション[U]]
- 5. Scala Future [T]オーバーヘッド?
- 6. std :: is_signedの相違点<T>とstd :: numeric_limits <T> :: is_signed?
- 7. $ T、[$ T]、$ Uはminizincチュートリアルで
- 8. サブスクリプションとサブスクライバ間の相違<T> angular2
- 9. Runnable instanceof Future <?>?
- 10. Generic of Generics?クラスA <T<U>>?
- 11. テンプレートを特殊化<typename T、テンプレート<typename> class U>
- 12. Rustのオーナーシップトラッキング:<T>(ヒープ)とT(スタック)の相違
- 13. なぜstd :: future <T>とstd :: shared_future <T>はメンバーswap()を提供していませんか?
- 14. GetInstance <t>とNew tの相違点
- 15. <T>と<U>のクラスは角2で表されますか?
- 16. List <KeyValuePair <T, U>>(Dictionary <T, U>のように)を簡単に初期化する方法はありますか?
- 17. MutablePropertyの作成方法<T> from MutableProperty <U> Swift ReactiveCocoa 4
- 18. 配列<T>と配列の相違点<T^>ここでTは値の型です
- 19. リスト<T>のプロパティとリストの間のデルタを見つける<T>
- 20. .CreateObjectSet <T>、.Set <T>、および.CreateQuery <T>の違いは?
- 21. 型崩れ:fooのUnaryTCConstraint [T、U]
- 22. アクションとの相違点<T>とパラメータとしてのプレーンラムダ
- 23. なぜコンパイラはV [+ _]に対してV [U] <: T => V [U] =>(_ <:V [_ <:U])を計算できないのですか?
- 24. C#間違った参照ノード<T> \リスト<T>システムのノードとリストへのクラス
- 25. FutureOr <T>は、未来型の具体化タイプがあります<T>/<T>?
- 26. オプション<T>をストリーム<T>に変換する方法?
- 27. u-boot.binとu-boot.romの違い
- 28. ssh -T github.com - >応答メッセージの間違ったユーザー名
- 29. sizeof(U)= k * sizeof(T)のUからstd :: array <T, k>をどのように構築すればよいですか?
- 30. `type {}`と `Dictionary <T>との違い{[key:string]:T; } `
これは、2番目のスニペットが背圧を提供しないことを意味しますか? – vgkowski
正しいですが、それはバックプレッシャーなしで可能な限り多くの未来を吹き飛ばします –