84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
次のコードのロックなし実装とロックなし実装の比率はどちらが良いでしょうか? jmeter を使用して 1 秒あたり 20 リクエストを作成しています。ロック コードなしの test() のスリープ操作の出力のほとんどは 500 ミリ秒とは大きく異なりますが、ロック コードの出力は基本的に 500 ミリ秒です。 1.2 ミリ秒の差、この問題は非常に奇妙です....
test()
1. まず最初に、Synchronized は AtomicXX クラスと比較されるのではなく、ReentrantLock クラスと比較されることが多くありますので、ご自身で検索してください。
2. ロックなしまたはロックに関する質問については、テストコード b のコードに問題があります。
前のスレッドがロックを解放するまで、後続のスレッドは実行を再開します。ロックの存在により、20 個のリクエストは順次実行 に似ており、この層は jvm によってスケジュールされます
cas 操作は実際には常に実行されており (cas 操作の実行を継続的に試行します)、無限ループがより多くの CPU リソースを消費することがわかっています。スレッドが多いほど、ここでの CAS 操作も多くなり、必然的に CPU 使用率が急増します。理論的には、メソッド B のコードが常に 20 個のアクティブな作業スレッドになるはずです。CPU とスレッド モデルは別のトピックです。 、スレッド数のチューニングは、jvm の比較的高度なトピックです。興味がある場合は、自分でググってください
1. まず最初に、Synchronized は AtomicXX クラスと比較されるのではなく、ReentrantLock クラスと比較されることが多くありますので、ご自身で検索してください。
2. ロックなしまたはロックに関する質問については、テストコード b のコードに問題があります。
前のスレッドがロックを解放するまで、後続のスレッドは実行を再開します。ロックの存在により、20 個のリクエストは順次実行 に似ており、この層は jvm によってスケジュールされます
cas 操作は実際には常に実行されており (cas 操作の実行を継続的に試行します)、無限ループがより多くの CPU リソースを消費することがわかっています。スレッドが多いほど、ここでの CAS 操作も多くなり、必然的に CPU 使用率が急増します。理論的には、メソッド B のコードが常に 20 個のアクティブな作業スレッドになるはずです。CPU とスレッド モデルは別のトピックです。 、スレッド数のチューニングは、jvm の比較的高度なトピックです。興味がある場合は、自分でググってください
。