4
take()
methodを使用してBlockingQueue
の要素にスレッドを吸着させると、(中断されていない限り)要素が利用可能になるのを待つことになります。パフォーマンスのためにBlockingQueue.take()でスレッドを明示的にスリープ解除する必要がありますか?
私は2つの質問があります。
i)が自動的にウェイクアップするとすぐ要素が利用可能になるか、遅延後に(すなわち、スレッドをチェック自体)があるとして、スレッドですか?
ii)遅延がある場合、スレッドを起床させるのは意味がありますか(たとえば明示的に中断して)?レイテンシとパフォーマンスについて考えています。
@DownVoter:コメントを残してください。 – MasterCassim
私はdownvoterは、(いいえ、私ではなかった:)と仮定することができます、 '遅れはありません'に反対しています - スケジュール遅延があるかもしれません。コンシューマスレッドは、プロデューサがアイテムをポストするときに準備されますが、コンシューマよりも優先度の高い実行可能/実行スレッドのセットがコアの数と同じかそれ以上の要素を持つ場合、すぐには実行されません。どちらの方法でも、割り込みやその他のスレッドによる手間は何も変わりません。遅れを最小化する唯一の方法は、消費者が十分に高い優先度を有することを保証することである。 –
説明をありがとう。私はスピードアップできる追加の遅延を参照していたので私の答えを編集しました。 – MasterCassim