Java の並列ストリーム操作で fork/join が使用されると公式ドキュメントのどこに記載されていますか? 質問する

Java の並列ストリーム操作で fork/join が使用されると公式ドキュメントのどこに記載されていますか? 質問する

私の理解では、ストリームフレームワークJava 8 の:

  1. 何かがソースを作成するストリーム
  2. 実装は、BaseStream#parallel()メソッドは、操作を並列に実行できる Stream を返します。

すでに誰かが方法を見つけたStreamフレームワークの並列実行でカスタムスレッドプールを使用するには、Java 8のデフォルトの並列Stream実装が使用するJava 8 APIの記述を見つけることができません。フォーク結合プール#commonPool(). (コレクション#parallelStream()、の方法はストリームサポートクラス、および私が知らない API 内の並列対応ストリームの可能性のあるその他のソース)。

検索結果から私が得ることができた情報は以下のとおりです。

  • Lambda の現状: ライブラリ エディション (「内部の並列処理」)
    Stream フレームワークと Fork/Join 機構について漠然と言及しています。

    Fork/Join メカニズムは、このプロセスを自動化するように設計されています。

  • JEP 107: コレクションの一括データ操作
    Collection インターフェースのデフォルト メソッド #parallelStream() が Fork/Join を使用して自身を実装していることがほぼ直接述べられています。しかし、共通プールについてはまだ何も述べられていません。

    並列実装は、Java 7 で導入された java.util.concurrency Fork/Join 実装に基づいています。

    それゆえ:コレクション#parallelStream()

  • クラス配列 (Javadoc)
    共通プールが使用されていることを複数回直接述べています。

    ForkJoin 共通プールは、並列タスクを実行するために使用されます。


私の質問は次のとおりです。

どこで言われているのかフォーク結合プール#commonPool()Java 8 API から取得されたストリームに対する並列操作に使用されますか?

ベストアンサー1

Java 8 並列ストリームが FJ フレームワークを使用することはどこに記載されていますか?

私の知る限り (Java 1.8u5)、並列ストリームの JavaDoc には、共通の ForkJoinPool が使用されることは記載されていません。

しかし、ForkJoinのドキュメントの下部に記載されています。http://docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html

スレッドプールの置き換えについて

私の理解では、カスタムForkJoinPool(一般的なForkJoinPoolの代わりに)を使用できるようです。Java 8 並列ストリームのカスタム スレッド プール- ただし、ForkJoin 実装とは異なるカスタム ThreadPool ではありません (ここで未解決の質問があります:Java 並列ストリームの共通スレッド プール バックエンドを (グローバルに) 置き換えるにはどうすればよいでしょうか?

Streams APIの置き換えについて

チェックアウトできますhttps://github.com/nurkiewicz/LazySeqこれはScalaのようなストリーム実装です。とても素晴らしく、とても興味深いです。

PS (ForkJoin と Streams に関して)

もし興味があれば、FJプールの使用に関するいくつかの問題に遭遇したことをお知らせしたいと思います。例えば、

おすすめ記事