1

このプログラムを実行すると、以下の結果が表示されます。

object ParallelTest {
  def main(args: Array[String]) {
    val start = System.nanoTime()
    val list = (1 to 10000).toList.par
    println("with par: elapsed: " + (System.nanoTime() - start) / 1000000 + " milliseconds")

    val start2 = System.nanoTime()
    val list2 = (1 to 10000).toList
    println("without par: elapsed: " + (System.nanoTime() - start2) / 1000000 + " milliseconds")
  } 
}

.

with par: elapsed: 238 milliseconds 
without par: elapsed: 0 milliseconds

これらの結果を理解している場合、「並列化」するにはコンテンツを並列データ構造にコピーする必要がparあるため、使用に時間がかかりますか?List

4

3 に答える 3

0

他の人は、非決定論的なウォームアップの不確実性のために、JVM でマイクロベンチマークを実行することの難しさについて述べています。別のトピックを上げたいと思います。

並列コレクション フレームワークは注意して使用する必要があります。並列化によってソフトウェアの速度を向上させるすべての試みは、アムダールの法則に従います。並列プロセッサを使用したプログラムの速度向上は、プログラムの順次部分に必要な時間によって制限されます。

したがって、並列コレクションを使用する可能性のある実際のアプリケーションが確実に (そして一貫して!) ベンチマークされ、並列で試行する価値のある部分とそうでない部分を判断できる場合にのみ、並列コレクションを適用することが重要です。さいわい、並列コレクションと順次コレクションを切り替えて使用法を比較するのは比較的簡単です。

また、並列プログラムを使用して速度を向上させることは、並行性を使用してソリューションを表現することと関連していますが、別の問題です。アクターは Scala でこれを提供します。GoOccam 、およびその他の言語は、代わりにCSP通信プロセス アーキテクチャに依存して、よりきめ細かく数学に基づいた同時実行性の表現を提供します (また、Scala で CSP をサポートする現在の作業もあります)。通常、並行プログラムは、主にアムダールの法則により、並列コレクションを使用する順次プログラムよりも並列処理に適しています。並列コレクションは、比較的大きなデータ セットと、要素ごとの処理負荷が比較的高い場合にのみ役立ちます。

于 2013-08-29T10:22:59.607 に答える