0
Tomcat source codeを読んでいるうちに、プロセッサオブジェクトのキャッシュにスタックが使用されていることがわかりました。 SynchronizedStack
は、 ConcurentLinkedQueue
?Tomcatはスタックのintseadを使用していますか?なぜ、queueやanyotherの代わりにstackを使用するのが良いですか?
Tomcat source codeを読んでいるうちに、プロセッサオブジェクトのキャッシュにスタックが使用されていることがわかりました。 SynchronizedStack
は、 ConcurentLinkedQueue
?Tomcatはスタックのintseadを使用していますか?なぜ、queueやanyotherの代わりにstackを使用するのが良いですか?
無料のプロセッサーに使用するデータ構造と、アイテムを追加することができますが、一定の時間内に選択できる使用可能なアイテムとの違いはありません。しかし、リンクされたコードはコンカレントであり、並行キューよりも同時スタックを実装する方が簡単で効果的です。
SynchronizedStackのjavadocは、明示的に述べている:
これは、要件は にあるときなし要件にして再利用可能なオブジェクトのプールを作成
ConcurrentLinkedQueue
に(主に)GC-無料の代替として意図されていますプールを縮小する。 最小限のごみでできるだけ早く必要な機能を素早く提供することを目的としています( )。
うーん、まだ彼らはすでに[SynchronizedQueue](http://svn.apache.org/repos/asf/tomcat/trunk/java/org/apache/tomcat/util/collections/SynchronizedQueueを実装している理由からです。 java)、またConcurrentLinkedQueueは待機フリーアルゴリズムです。 SynchronizedStackとSynchronizedQueueはブロックされています – Shashank
'SynchronizedStack.push'と' SynchronizedStack.offer'を安定したケースで比較しましょう。スタックやキューはそれ以上展開されません。この場合、 'push'はインクリメント、比較(正しく' false'と予測される)、配列ストアとリターンを実行します。 'オファー'はインクリメント、配列ストア、比較(誤って 'false'と予測される)、別の比較(正しく' false'と予測される)、戻りを実行します。したがって、「オファー」は1つ(時には間違って予測される)より多くのコストを要する。同じ解析が 'pop'と' poll'メソッドを保持しています。 – kgeorgiy