問題タブ [consumer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - プロデューサースレッドがスタックしているが、ブロックされていない
JConsoleスタックトレースによると、プロデューサーとコンシューマーのスレッドセットがありますが、プロデューサーは、ではないコード行でスタックしています。.put()
スタックトレースによるとwhile(true)
、ループを進むことなく、ライン上にとどまるだけです。
25行目がそのwhile(true) {
行です。
java - プロデューサー コンシューマーのデッドロック
上記のコードを使用してプロデューサーの消費者の問題を理解しようとしています。上記のコードを実行すると、
プログラムはここでのみスタックします (終了しません)。
誰か私がここで何をしているのか説明してください。
simulation - 経済生産者/消費者シミュレーション
こんにちは素晴らしいコミュニティです!
私は現在、暇なときに小さなゲームを書いています。それは、プレイヤーがいくつかの星を制御できる大きな銀河で行われます。これらの星では、それぞれいくつかの (0..*) の入力を持つ建物を構築し、いくつかの出力を生成できます。これらの建物には最大容量/スループットがあり、その入力を縮小すると出力も同じ量だけ縮小されます。すべての建物のスループットを最適化 (または概算) する予算編成アルゴリズムを見つけたいと考えています。ある種の最大フローの問題のように思えますが、私が読んだフロー最適化アルゴリズムのどれも、異なるタイプの入力または依存する出力を持っていません。
私が遊んでいるおもちゃ「テック ツリー」は次のとおりです。
私は準最適なアルゴリズムを喜んで受け入れ、入力/出力にサイクルがないことを保証します (それらは構築から構築への DAG を形成します)。アイデアは、プレイヤーの介入なしに、合理的なスループットと技術ツリーの複雑さを許可することです。数百または数千の星のスケールでは、プレイヤーが予算戦略を手動で定義できるようにすることは楽しくなく、それを生きていないプレイヤーに明確な違いを与えるためです。アドバンテージ。
私の現在の戦略は、DAG を構築し、リソースに全体的な順序を与えることです (船は金属よりも優れています。鉱石はエネルギーよりも優れています)。次に、各リソースをループして、最も「子孫」の建物を見つけます。そのリソースを生成し、その入力から再帰的に貪欲に取得できるようにします (造船所は 2 つのエネルギーと 1 つの金属を取得し、次に製油所は 1 つのエネルギーと 1 つの鉱石を取得するなど)、グラフ内の「嘘つき」を見つけます (ソーラー プラントは 4 エネルギーを提供します。最大値が 2 の場合)、生産を縮小し、変化を前方に伝播します。DAG のすべてが解決されたら、ターミナル要素 (造船所) をグラフから削除し、建物の最大スループットから各エッジの「現在のスループット」を差し引きます。次に、次のタイプのリソースに対してプロセスを繰り返します。もっと良い方法がないか、私よりもはるかに賢い人たちに聞いてみようと思いました。:)
listener - ActiveMQ、prefetch=0 のコンシューマー、コンソールで「エンキュー」数を増やす (ポーリングのため?)
Spring で構成された ActiveMQ を使用し、prefetch=0 の connectionFactory と 5-5 の同時実行性で構成されたリスナーを使用すると、予想どおり、ブローカーがメッセージをプッシュするのではなく、リスナーが新しいメッセージをポーリングしているように見えます。
ただし、キューの「アクティブ リスナー」の ActiveMQ Web コンソールでは、「エンキュー」列の数が急速に (毎秒約 1 つ) 増え続けていることがわかります。これは正常な動作ですか?prefetch=0 になったので、これは新しいメッセージのリスナーの各ポーリングを反映しているだけですか? 処理中の実際のメッセージがないのに、キューの Enqueue カウントが増加しているのは少し奇妙に思えます。また、ポーリングの頻度を調整する方法があるかどうか、または各コンシューマがブローカーに新しいメッセージをポーリングする前に遅延を設ける方法があるかどうかも疑問に思っていました.
動作するメッセージがない場合でも、prefetch=0 で各コンシューマのエンキュー カウントが増加し続けることを示すコンソールの写真:
http://activemq.2283324.n4.nabble.com/file/n4666021/enqueues.png