1. ホーム
  2. java

Javaの並行処理。CASとロックの比較 [終了しました]

2023-09-06 23:21:58

質問

私は本を読んでいます Java並行処理の実践 . 第15章では、ノンブロッキングアルゴリズムと コンペア&スワップ (CAS)メソッドについてです。

CASはロック方式よりはるかに性能が良いと書かれています。 この2つの概念をすでに使っている人に聞きたいのですが、どのような場合にどちらの概念がいいのでしょうか?本当にそんなに速いのでしょうか?

私にとっては、ロックの使い方はより明確で理解しやすく、おそらく保守もしやすいと思います。 (私が間違っているならば訂正してください) . より良いパフォーマンスを得るために、ロックよりもCASに関連する同時実行コードを作成することに本当に集中するべきでしょうか、それとも持続可能性がより重要なのでしょうか?

いつ何を使うかという厳密なルールがないことは承知しています。 しかし、私はただCASの新しい概念についてのいくつかの意見、経験を聞きたいと思います。

どのように解決するのですか?

CASは一般にロックよりはるかに高速ですが、競合の程度に依存します。CAS は読み込みと比較の間に値が変わると再試行を強制することがあるため、問題の変数が他の多くのスレッドによって激しく叩かれている場合 (または古い値から新しい値を計算するのにコストがかかる場合 (またはその両方)) は、理論的にはスレッドがビジーウェイトに陥ることがあります。

CASの主な問題は、ロックよりも正しくプログラムすることがはるかに難しいということです。ロックは、メッセージパッシングや STM ロックはメッセージパッシングやよりも正しく使うのが難しいので、これをロックの使用を推奨しているわけではありません。