18

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

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

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

4

2 に答える 2

28

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

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

于 2009-05-06T03:04:18.007 に答える
6

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

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

これは非常に非効率的である可能性があります-多くの不要なCPU時間を使用します。また、不要な遅延が発生する可能性もあります。

于 2009-05-06T03:00:10.013 に答える