このcomparison of StampedLock and other locksは、競合が発生すると最も速いことを示しています(StampedLock)。しかし、これや他のさまざまな記事は、それがなぜより速いのかを列挙していません。他のタイプのロックと同じCASセマンティクスを使用しているようですか?競合が起きるにつれ、なぜそれが最速であるのか誰にも説明できますか?
たとえば、このコードでは、writeLockは他のwriteLocksだけでなく、readLocksもブロックします。私はこの時点でoptimisticReadLocksなどには関心がありません。ちょうどプレーンwriteLock ..利点は何ですか、どのようにReentrantLockより速いです(プラスリエントラントもありません)。なぜJava StampedLockがReentrantReadWriteLockよりも速いのですか
3
A
答えて
1
明確にするために、StampedLockは、競合が発生すると読み込みがはるかに高速です。作家は少し早いですが、読むほど速くはありません。理由を説明します。
ほとんどの場合、読み取り - 書き込みロックでは、書き込みはかなり少なくなります。ただし、これにもかかわらず、ReentrantReadWriteLock
のreadLock()
を取得するたびに、リーダー数を増やす必要があります。これにより、このロックを使用するすべてのコアで強制的にキャッシュ無効化が行われます。
重大な競合が発生すると、読み取り時に大幅な速度低下が発生する可能性があります。読み込みは速くなければなりません。readLock()
変数を更新する必要はありません。直感的です。
代わりに、スタンプを持っているとか、バージョンと言うとどうすればいいですか? 1回の読取り反復で1回だけ更新されるもの。これは1つのスレッドだけスタンプ値を更新した場合、競合の下で、ロックで読みたいと思ったときに、すべての読みのスレッドがキャッシュヒットを実行されます(のは、書き込み後にしましょう)され、私たちのために何
。これにより、キャッシュの無効化が禁止され、RRWLよりも適切な方法でロックが実行されます。
tryOptimisticRead
- が
- が
- スタンプが変更された値を読むスタンプを取得(CASのような)を使用するとき
StampedLock
を使用するためのパターンはロックフリーアルゴリズムに似ていますか?- はい、もう一度お試しいただくか、ブロッキングが
- はありません、我々は良いです読み出す、のがに移りましょう。だから、
関連する問題
- 1. Cython:intよりもsize_tが速いのはなぜですか?
- 2. はなぜコード2よりもコード1速いのですか?
- 3. なぜ、このコードは私のものよりも速いのですか?
- 4. `{}`のRコードが `()`のものより速いのはなぜですか?
- 5. intよりも値渡しの方が速いのはなぜですか?
- 6. MySQLの最適化。なぜoption2がoption1よりも速いのですか
- 7. ローカル変数アクセスがPythonのクラスメンバーアクセスよりも速いのはなぜですか?
- 8. なぜリアクティブプログラミングアプリケーション(vert.x)はシングルスレッドロックフリー、no-blocking Javaアプリケーションよりも高速ですか?
- 9. WindowsでFFTWがLinuxよりも高速なのはなぜですか?
- 10. なぜ簡単な意思決定ツリーよりも1つの見積もりが速いのですか?
- 11. Windows C++のマルチスレッドIOPSがIOMeterよりも高速なのはなぜですか?
- 12. なぜopenssl_pkey_newはgpgよりもずっと高速ですか?
- 13. なぜWebViewはTextViewよりもはるかに高速です
- 14. JTDSがMicrosoft JDBCドライバよりも高速なのはなぜですか?
- 15. 「hash( 'md5'、 'string')」が「md5( 'string')」よりも高速なのはなぜですか?
- 16. PublishがXNAのReleaseより速いのはなぜですか?
- 17. ディクショナリがPythonのリストより速いのはなぜですか?
- 18. なぜこのコードでC++がCよりもずっと高速ですか?
- 19. forループがArray.prototype.map()より速いのはなぜですか
- 20. コアデータがSQLiteより速いのはなぜですか
- 21. なぜ(ftruncate + mmap + memcpy)が(write)より速いのですか?
- 22. なぜCrystalがRubyより速いのですか?
- 23. Python:なぜ、*と**が/とsqrt()より速いのですか?
- 24. なぜConcurrentHashMap :: putIfAbsentがConcurrentHashMap :: computeIfAbsentより速いのですか?
- 25. なぜorder()がsort.list()より速いのですか?
- 26. Java - PriorityQueueよりも速いものを探しています
- 27. TensorflowでKerasよりも2倍速いのはなぜですか?
- 28. なぜplt.importはplt.pcolorよりもずっと速いのですか?
- 29. 950Mよりも950M速いですか?
- 30. Javaでは、値がゼロよりも速いかどうかを、値がゼロに等しいかどうかをチェックするよりも速くチェックしていますか?もしそうなら、なぜですか?
ねえジョンさえStampedLockが...これを参照してくださいreadLockにいくつかの書き込みを使用しているように見える>> U.compareAndSwapLong(これ、STATE、S、次回= S + RUNIT) –
ジョン、おそらく唯一の偉大な最適化は、readLockとWRITELOCKは、ミルの実行表示される手順1で上記の方法で使用されtryOptimisticRead ...、2、3です。右@ApurvaSinghだ –
、 'tryOptimisticRead'はここに非常に便利であることです。 –