問題タブ [threadpool]
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.
multicore - 同期プログラミングと非同期プログラミング
サーバーを設計するときは、次の 2 つのアプローチを検討しています。
非同期 (選択ベース) アプローチにより、バックエンド rpc を単一のスレッドで並列化できます。
各バックエンド rpc がスレッド プールの別のスレッドで処理される同期アプローチ。
トレードオフがあります。1 つはパフォーマンスが向上し、2 はコードの複雑さが軽減されます。マシンがマルチコアおよび 64 ビットに移行する現在、1 は本当に重要ですか?
c# - スレッディングとラムダ式
以下の2つのコードの違いは何ですか?2番目のものを使用して問題はありますか?
シナリオ1:
シナリオ2
シナリオ2では、例外をパラメーターとしてThreadPoolに渡していません。例外オブジェクトのスレッドマーシャリングはどのように発生しますか?問題がありますか?もしあれば、これを行うことの制限は何ですか?大きな利点は、任意の数のパラメーターを非常に簡単に渡すことができることです。
.net - ThreadPoolを介して循環させた場合、ThreadStatic変数の値は引き続き存在しますか?
ThreadStatic変数を使用して一部のデータを格納していますが、スレッドに格納したデータが終了してThreadPoolにリリースされた後も、そこに残っているのではないかと心配しています。スレッドを終了する前に、ThreadStatic変数をクリアすることを心配する必要がありますか?または、次のQueueUserWorkItemに「渡す」前に、ThreadPoolがこれを実行しますか?これは私にとって特に重要です。なぜなら、私のアプリの他のスレッドがThreadStatic変数の観点から機能するためのクリーンな状態になっていることを確認する必要があるからです。ありがとう!
multithreading - この特定のスレッドの問題を解決する方法
次の記事のコードを使用して、独自の ThreadPool を実装しました: http://www.developer.com/net/article.php/3783756
これが私が達成したいことです。タイマーを介してトリガーされたサービスは、新しいジョブを実行するために 5 秒ごとにデータベースにクエリを実行する必要があります。ジョブは基本的に、引数を指定して実行する必要があるコマンドライン プログラムに関する情報のみです。
これらのプログラムは、最大 50 個以上同時に実行できる必要があります。プログラムは、数秒、数分、さらには数時間実行できます。サービスは、これらのプログラムを常に制御する必要があります。つまり、たとえば、要求に応じてプログラムを強制終了できる必要があります。
上記の ThreadPool 実装を使用して、実行するプログラムをキューに入れ始め、サービスが実際にいつそれらを実行したかを確認できました。今のところ問題ありません。ただし、ここでのメカニズムは次のように機能します。
ThreadPool はワーカースレッドを作成して開始します。プログラムがキューに入れられるたびに、ワーカースレッドはこれを認識し、本質的に System.Diagnostics.Process オブジェクトをインスタンス化して外部プログラムを開始するデリゲートを呼び出します。その後、スレッドはその作業を終了し、さらにプログラムを開始できるようになります。ただし...開始するプログラムがない場合、アイドルタイマーによりスレッドマネージャーがスレッドを強制終了し、開始されたプロセスを中断します。
これは私が必要とするものではありません。ここで誰かが、私がよりよく説明したシナリオを処理する方法を知っていますか?
c++ - 待機中にメッセージをポンピングし続ける方法は?
メッセージ ポンプ スレッド プール アーキテクチャに基づくアプリケーションがあります。ブロックする可能性のあるアクションがある場合は常に、「完了/トリガー evnet でのコールバック」アクションとして実装されるため、実行中のスレッドがストールすることはありません。
この手法はほとんどの場合に適していますが、コードが非常に複雑になり、非常に不便になる場合があります。
私ができるようにしたいのは、関数を待機中の前後の部分に分割することなく、透過的な方法で待機中にイベントを処理し続けることです。
どうすればいいですか?
私は2つの選択肢を念頭に置いていました:
- 待機中に実行中の関数内からメッセージ ループを実行します。
- 待機中に新しい作業スレッドを作成し、再開時に (適切な方法で) 終了します。
いくつか例を挙げると、どちらのオプションにも欠点があります。
1 の場合:
- スタック オーバーフローが発生する可能性があります。
- デッドロック状態になる可能性があります。
- 内側のメッセージが 2 番目のイベントの完了を待機する結果となり、その間に外側のイベントが完了すると、外側の関数は 2 番目のイベントが完了するまで続行できず、この状況が拡大する可能性があります。
オプション 2 は、単純にますます多くのスレッドを作成することになります。
もちろん、私が思いもよらなかった他のオプションがあるかもしれません。
編集:言語は C++ であるため、簡単な (移植可能な?) 方法で関数をステップアウトおよびステップインすることはできません。プラットフォームは Windows (API) ですが、関係ないと思います。
java - Web サービス要求を実行するスレッド プールの適切なスレッド数
Java で FixedThreadPool Executor オブジェクトを作成する場合、Executor が同時に実行できるスレッドの数を示す引数を渡す必要があります。私は、電話番号の大規模なコレクションを処理することを担当するサービス クラスを構築しています。電話番号ごとに、Web サービスを実行する必要があり (これがボトルネックです)、応答をハッシュマップに保存する必要があります。
このボトルネックによるサービスのパフォーマンスへの悪影響を軽減するために、未処理の要素を取得して処理する Worker クラスを作成することにしました。Worker クラスは Runnable インターフェイスを実装し、Executor を使用して Workers を実行します。
同時に実行できる Worker の数は、Executor FixedThreadPool のサイズによって異なります。ThreadPool の安全なサイズはどれくらいですか? 大きな数を引数として FixedTheradPool を作成するとどうなりますか?
c# - 個別のインスタンスを持つ .NET カスタム スレッドプール
個別のインスタンス (アプリケーションごとに複数のスレッドプール) を持つことができる、最も推奨される .NET カスタム スレッドプールは何ですか? 無制限のキュー サイズ (クローラーの構築) が必要であり、クロールしているサイトごとに個別のスレッドプールを並行して実行する必要があります。
編集:これらのサイトをできるだけ早くマイニングして情報を得る必要があります.各サイトに個別のスレッドプールを使用すると、いつでも各サイトで動作するスレッドの数を制御できます. (2 ~ 3 個以内)
ありがとうロイ
c++ - C++ マスター/ワーカー
クロスプラットフォームの C++ マスター/ワーカー ライブラリまたはワーク キュー ライブラリを探しています。一般的な考え方は、私のアプリケーションがある種の Task または Work オブジェクトを作成し、それらを作業マスターまたは作業キューに渡し、それが別のスレッドまたはプロセスで作業を実行するというものです。少しコンテキストを提供するために、アプリケーションは CD リッパーであり、並列化したいタスクは「トラックのリッピング」、「WAV から Mp3 へのエンコード」などです。
私の基本的な要件は次のとおりです。
- 構成可能な数の同時タスクをサポートする必要があります。
- 依存するすべてのタスクが完了するまでタスクが実行されないように、タスク間の依存関係をサポートする必要があります。
- タスクのキャンセルを許可する必要があります (または、少なくともキャンセルを自分のタスクにコーディングすることを妨げないでください)。
- ステータスと進行状況の情報をメイン アプリケーション スレッドに報告できるようにする必要があります。
- Windows、Mac OS X、および Linux で動作する必要があります
- オープンソースでなければなりません。
このライブラリも次の場合は特に便利です。
- Qt のシグナル/スロット メカニズムと統合されています。
- タスクを実行するためのスレッドまたはプロセスの使用をサポートしました。
類推として、私は Java の ExecutorService または他の同様のスレッド プーリング ライブラリに似たものを探していますが、クロスプラットフォームの C++ です。そのような獣を知っている人はいますか?
ありがとう!