問題タブ [blockingqueue]
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 - ブロッキングキューを使用してカメラフィードをバックグラウンドで処理するにはどうすればよいですか?
「顔検出」のためにAndroidアプリケーションでカメラフィードを処理しているときに問題が発生しました。
私がやろうとしていること:
-surfaceView(UIスレッド)で電話のカメラフィードを継続的に表示するアクティビティがあります
-パフォーマンスの問題を回避するために、OpenCvを使用して検出された面に長方形を描画するためにサーフェスビューを上に配置しました(これはスレッドで実行されています、たとえばthread2)
-直接フィード画像のコピーをThread2に渡して、スレッド2が検出を実行し、オーバーレイサーフェスビューに描画できるようにしようとしています。
私が今いる場所:
-UIthreadがBlockingQueue.add(..)を使用して画像をBlockingQueueに入れ、Thread2がBlockingQで画像を取得して処理し、バックグラウンドで顔を検出できるように、blockingqueueでスレッドを使用することを考えていました
条件: UIスレッドを待たずに、中断されたフィードがディスプレイに表示されるようにします。画像を配置するだけで、他に何も待たずに次のフィードを取得してプロセスを繰り返すことができます。
現在、私はRunnableインターフェイスを実装する新しいクラスを使用しています。このクラスには、blockingQueue.putImage()を使用して画像を配置および取得する2つのメソッドputImage(bitmap)とgetImage()があり、UIthreadによって呼び出され、getImage()はthread2によって呼び出されます。
問題: 画像をブロッキングキューに入れ続けると、Thread2はblockingQ(Itsblocked)にアクセスできず、UIスレッドは中断されずに実行されるはずなので、メインスレッドでwait()またはsleep()を呼び出すことができません。
Thread2がMainThreadをブロックせずにキューからこの画像を取得する方法はありますか?
java - BlockingQueueとセマフォ
データベース接続プールなどのリソースプールを実装する場合。どの同時収集を使用しますか?BlockingQueue
またはSemaphore
?
の場合BlockingQueue
、プロデューサー-コンシューマーデザインパターンと同様に、プロデューサーはすべての接続をキューに配置し、コンシューマーはキューから次に使用可能な接続を取得します。
の場合Semaphore
、セマフォをプールサイズに指定し、プールサイズに達するまで許可を取得し、いずれかが許可を解放してリソースをプールに戻すのを待ちます。
どちらがよりシンプルで簡単ですか?そして、1つしか使用できず、他は使用できないシナリオは何ですか?
java - java.util.concurrent.LinkedBlockingQueue は FIFO ではありませんか?
java.util.concurrent.LinkedBlockingQueueの簡単な説明は、それが FIFO キューであると述べています。これは、スレッド A が最初に一連のエントリ (a1、a2、... an) をキューに追加し、次にスレッド B がさらにいくつかのものを追加した場合を意味します。キュー (b1、b2、... bm) に追加すると、一部のコンシューマー スレッドは、B からこれらを取得する前に、A からのすべてのエントリを使い果たす必要があります (したがって、FIFO)。しかし、私が見たのは、A からのエントリと B からのこれらのエントリは、B が A よりもはるかに後でエントリを追加したにもかかわらず、インターリーブされているということですLinkedBlockingQueue
。クライアントからの要求エントリを処理するための非同期ワーカー スレッド。
遅れて到着したリクエストは、以前のエントリがすべて使い果たされるまでキューで待機する必要があるため (クライアントはリクエストごとに数千のエントリを送信できます)、コードの公平性について質問していましたが、驚いたことに、遅れて到着したクライアントは応答を受け取りました。ほとんどすぐに戻ります。これはLinkedBlockingQueue
FIFOではないということですか?? とても困っているので助けてください。
java - Boss-Worker を使用した Java スレッド
私は学業をしなければならず、いくつかのコードを完成させましたが、いくつか質問があります:
java で Boss-Workers アプリケーションを作成する必要があります。
- 私はこれらのクラスを持っています:
Main WorkerThread BossThread Job
基本的に私がやりたいことは、それが a をBossThread
保持しBlockingQueue
、ワーカーがそこに行って を探すことですJobs
。
質問1:
現時点では 5WorkingThreads
と 1を開始しBossThread
ます。
主要:
ボススレッド:
これは正常ですか、それとも自分で作成する必要がありますWorkerThreads
かBossThread
?
質問2:
ご覧のとおり、キューを each に与えていますがWorkerThread
、それは合理的ですか、それともキューを 1 か所だけに保存できますか?
質問 3:
BossThread
ユーザーがキューにさらにものを追加するかどうかを待つために、何とか実行し続ける必要がありますか? そしてWorkerThreads
、キューからジョブを探すために、どのように実行し続けるのでしょうか?
全体的な提案や設計上の欠陥や提案はありますか?
java - Java ピア ツー ピア スレッド モデル、全員が Job を待つ
これは学業です。ピアツーピア スレッド モデルを作成しようとしています:
http://www.informit.com/articles/article.aspx?p=169479&seqNum=5
委任モデルにはタスクをワーカー スレッドに委任するボス スレッドがあるのに対し、ピア ツー ピア モデルではすべてのスレッドが同等の作業ステータスを持ちます。すべてのタスクを実行するために必要なすべてのスレッドを最初に作成する単一のスレッドがありますが、そのスレッドはワーカー スレッドと見なされ、委任は行われません。このモデルには、集中スレッドはありません。
したがって、メイン スレッドは 5 つのスレッドを作成し、それがキューのリッスンを開始し、メイン スレッドで 10 秒間ジョブを作成します。また、すべてのスレッドがタスクを実行する必要があるため、このスレッドもジョブを待機する必要があります。これどうやってするの?
したがって、私のメインスレッドはスレッドの作成に取り組み、ワーカーはただ座っているだけqueue.take()
です.
ピアツーピア モデルでは、すべてのスレッドqueue.take()
がジョブを待機する必要があることを正しく理解していますか。もしそうなら、どうすればこれを行うことができますか? 助言がありますか?
c# - C#のブロッキングキューで現在実行中のタスクを取得するには?
ブロッキングキューに追加している現在実行中のタスクを取得したいのですが、どのように行うことができますか?
編集:私はこの優先度スケジューラを使用しており、優先度の異なる複数のタスクを追加しています:
優先度に応じてタスクを停止して再開したい。たとえば、優先度の高い新しいタスクが到着した場合、優先度の低いタスクが停止してタスクを実行し、再開します...
java - スレッドの量を増やすと、生産者と消費者の問題がより速くなりますか?
無制限のリンクされたブロッキング キューを使用して、消費者と生産者の問題に似たものを実装しました。プロデューサーがオブジェクトをキューに入れ、コンシューマーがそれを受け取ります。同じ量のオブジェクトを処理しながら、試行ごとにスレッドの量を 2 倍にしてプログラムをテストしたところ、すべての試行の時間は一定のようです。それは一定であると思われますか?それともスレッド数が多いということは処理が速くなるということですか? 共有リソースの速度低下または同期の原因が私のコードであるかどうかはわかりません。何か案は?
c++ - カスタムブロッキングキューの実装による未解決の外部シンボル
独自のブロッキングキューを作成しましたが、リンカーエラーが発生する理由を理解するのに問題があります(これはVisual Studio 2010のQtアプリであることに注意してください)。
実装は少し長いので、私はそれのためのニプレスを持っています:http: //pastie.org/5368660
プログラムのエントリポイントは次のようになります。
私が得るリンカーエラーは次のとおりです。
リンカがコンストラクタ(またはからの他のメソッド)を見つけられない理由がわかりませんBlockingQueue
。何か案は?
java - 重複が LinkedBlockingQueue に追加されていないことを確認する方法は?
Java メール API を使用して、複数の Gmail アカウントからメッセージを受信しています。さまざまなアカウントがさまざまなスレッドで処理されておりLinkedBlockingQueue
、メールを保存するために を使用しています。ただし、同じメールが繰り返し に追加されるのは望ましくありませんQueue
。これは私がこれまでに持っているコードです:
私が抱えている問題は、キューが空かどうかを確認しelse
た後のブロックにあります。if
読み込まれたばかりの一連のメッセージをチェックして、既にQueue
. メッセージが にある場合は、Queue
再度追加しないでください。.contains()
メッセージがダウンロードされるたびに異なるメモリの場所が与えられるため、単純に を使用することはできません。そのため、Message
オブジェクトは実際には同じ (たとえば、同じ件名、内容など) である可能性がありますが、同じ署名はありません (たとえば、初めてダウンロードしたときはそうかもしれませんMessagehgshsh676767
が、次回はそうかもしれませんMessageyyetwt8965
)。
レンガの壁にぶつかりました。重複が追加されないようにする方法を誰か提案できますか?