0

静的フィールドを持つコードがありますval format = DateTimeFormatter.forPattern("yyyy-MM-dd") 。これで、フォーマッタのこのインスタンスは、同時実行スレッドによって使用され、日付format.parseDateTime("2013-09-24")とが解析および出力されますformat.print(instant)。Scala では、不変フィールドのみを使用すれば、並行性を気にせずにコードを記述できることを学びましたが、パフォーマンスはどうでしょうか? 複数のスレッドが同じインスタンスを使用すると、ボトルネックになる可能性はありますか?
ありがとう、

4

2 に答える 2

3

あなたの質問はJavaに関連しています。メソッドの実装forPatternがスレッドセーフである場合、ボトルネックなしで多くのスレッド間で共有できます。

javadoc をチェックして、実装がスレッドセーフかどうかを確認してください。あなたの特定のケースでは、あなたがJodaTimeライブラリを使用していると仮定します:

DateTime Javadocから抽出:

DateTimeFormat はスレッドセーフで不変であり、それが返すフォーマッタも同様です。

SimpleDateFormat javadocを参照してください:

日付形式は同期されません。スレッドごとに個別のフォーマット インスタンスを作成することをお勧めします。複数のスレッドが同時にフォーマットにアクセスする場合は、外部で同期する必要があります。

val を使用するということは、宣言後に変数参照が変更されないことを意味します。Scala での var 定義と val 定義の違いは何ですか? を参照してください。

于 2013-09-24T09:59:48.563 に答える
0

あなたはそれを誤解しているように見えます.Scalaの並行性はJava(または他の言語)に非常に似ており、特別なことは何もありません. 代わりのライブラリとシンタックス シュガーを提供することで、はるかに少ないボイラー プレートでそれらを実行でき、さらに重要なことに安全に実行できます (例: akka)。

ただし、コア数、スレッドプールサイズ、コンテキストスイッチなどへの依存など、他の原則はすべて処理して処理する必要があります。

ここで、複数のスレッドによってアクセスされるイミュータブルvalがパフォーマンスを低下させるかどうかについて質問します。オーバーヘッドがあるべきではないと思いますし、サポートするデータもありません。しかし、プロセッサがそれをキャッシュでき、同じオブジェクトを別のコアでより速く取得できるため、パフォーマンスは良いかもしれないと思います.

于 2013-09-24T10:16:13.367 に答える