質問

私は、リモートホストに送信する必要があるメッセージに関する情報を保持するキューを使用するプロジェクトに取り組んでいます。その場合、1つのスレッドが情報をキューに入れる役割を果たし、別のスレッドが情報をキューから取得して送信する役割を果たします。 2番目のスレッドは、定期的にキューの情報を確認する必要があります。

しかし、後でこれが車輪の再発明であることがわかりました:)この目的でブロッキングキューを使用できます。

上記のアプリケーションでブロッキングキューを使用する他の利点は何ですか? (例:パフォーマンス、コードの変更可能、特別なトリックなど)

役に立ちましたか?

解決

主な利点は、 BlockingQueue が正しい、スレッドセーフな実装を提供することです。開発者はこの機能を何年も自分で実装してきましたが、正しく機能するのは難しいです。ランタイムには、並行処理の専門家によって開発、レビュー、および保守された実装があります。

"ブロッキング"キューの性質にはいくつかの利点があります。まず、要素の追加時に、キューの容量が制限されている場合、メモリの消費も制限されます。また、キューのコンシューマーがプロデューサーに遅れをとると、プロデューサーは要素を追加するのを待たなければならないため、当然ながら抑制されます。キューから要素を取得する場合、主な利点は単純さです。永遠に待つことは簡単であり、指定されたタイムアウトを正しく待つことは少し複雑です。

他のヒント

ブロッキングキューで削除する重要なことは「ポーリング」です。これはあなたが言うところです

  

その場合、2番目のスレッドは定期的に情報のキューをチェックする必要があります。

これは非常に非効率的である可能性があり、多くの不必要なCPU時間を使用します。また、不要なレイテンシーが発生する可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top