-1

こんにちは、私はjavaと並行プログラミングの初心者です。タスクキューを定義するために使用するたびに並行プログラミングで見たすべての例のうち、人々はブロッキングキューのさまざまな実装を使用しました。 なぜだけキューをブロックするのですか?利点と欠点は何ですか? なぜ他のデータ構造ではありませんか?スレッドプールタスクキューには、ブロッキングキューまたはその他のデータ構造のみを使用できますか?

+0

方法が広すぎる - 本の最初の数章を読むことをお勧めします。 Java Concurrency in Practice。 – slim

+0

答えがスリムであることに感謝..それはあまりにも広い質問です。私はちょうどそれがなぜそうであるかというアイデアを得たいと思っていました。:) –

答えて

1

私が見ている特定されていないコードが特定のデータ構造を使用していて、他のものではない理由を正確には説明できません。しかし、ブロッキングキューには素晴らしいプロパティがあります。固定数の要素だけを保持し、その制限を超えてアイテムを挿入するプロデューサを強制的に待機させるのが実際の機能です。

キューサイズを制限すると、誤って動作するプロデューサからアプリケーションを保護しやすくなります。そうしないと、アプリケーションがメモリ不足になるまでキューにエントリを埋め込む可能性があります。明らかに、それを実行することがタスクにタスクを挿入する方が速く、エグゼキュータは作業に砲撃を受けるリスクがあります。

プロデューサを待機させると、システムに背圧がかかります。キューを使用すると、プロデューサはそれが遅れていることを知り、より多くの作業を受け入れることができなくなります。プロデューサーが待っているのは、キューを叩き続けるよりも良いのです。背圧はシステムを正常に劣化させる。

理解しやすいデータ構造を持ち、アプリケーションを構築する上で実用的なメリットがあり、タスクキューに適しているようです。もちろん、人々はそれを使うつもりです。

+0

答えのネイサンに感謝します。私は概要やアイデアを持っているのはなぜですか?:) –

関連する問題