JCIPブックのパフォーマンスとスケーラビリティの章から:
同期メカニズムは競合のないケース (volatile は常に競合しない) に合わせて最適化されており、この記事の執筆時点では、競合のない「高速パス」同期のパフォーマンス コストは、ほとんどのシステムで 20 ~ 250 クロック サイクルの範囲です。
ここで高速パス競合のない同期とはどういう意味ですか?
JCIPブックのパフォーマンスとスケーラビリティの章から:
同期メカニズムは競合のないケース (volatile は常に競合しない) に合わせて最適化されており、この記事の執筆時点では、競合のない「高速パス」同期のパフォーマンス コストは、ほとんどのシステムで 20 ~ 250 クロック サイクルの範囲です。
ここで高速パス競合のない同期とはどういう意味ですか?
ここには 2 つの異なる概念があります。
スローパス コードとファストパス コード
これは、マシン固有のバイナリ コードの作成者を識別する別の方法です。
HotSpot VM では、スロー パス コードは C++ 実装によって生成されたバイナリ コードであり、ファスト パス コードは JIT コンパイラによって生成されたコードを意味します。
一般的に、高速パス コードはより最適化されています。JIT コンパイラーを完全に理解するには、wikipedia から始めることをお勧めします。
競合しない同期と競合する同期
Java の同期構造 ( Monitors ) には、所有権の概念があります。スレッドがモニターをロック (所有権を取得) しようとすると、ロック (別のスレッドが所有) またはロック解除される可能性があります。
非競合同期は、次の 2 つの異なるシナリオで発生します。
一方、競合同期は、所有者スレッドがモニター ロックを解放するまでスレッドがブロックされることを意味します。
質問に答える
ファスト パスの競合のない同期とは、最も安価なシナリオ (競合のない同期) での最速のバイトコード変換 (ファスト パス) を意味します。
私はこの本のトピックに精通していませんが、一般的に「高速パス」は、他のものよりもはるかに効率的であり、したがって好まれる特定の可能な制御フロー ブランチですが、複雑なケースを処理することはできません。
この本はJavaのsynchronized
ブロック/修飾子について話していると思います。この場合、高速パスは、同じデータにアクセスする他のスレッドがないことを簡単に検出できるパスである可能性が最も高くなります。この本が言っていることは、 の実装は、synchronized
複数のスレッドが実際にオブジェクトを使用していて、同期が実際にオブジェクトを仲介しなければならない場合とは対照的に、1 つのスレッドだけが実際にオブジェクトを使用している場合に最高のパフォーマンスを発揮するように最適化されているということです。彼ら。
同期ロックを取得する最初のステップは、単一の揮発性書き込み (モニター所有者フィールド) です。ロックが競合していない場合は、それがすべてです。
ロックが争われた場合、クロック サイクルを増加させるさまざまなコンテキスト スイッチやその他のメカニズムが発生します。