4

質問:

Task Parallel Library に複数のタスクを同時に実行させる方法はありますか? 各コアで追加されたすべてのコンテキスト切り替えにより、プロセス全体の実行が遅くなることを意味するとしても?

バックグラウンド:

私はマルチスレッドにかなり慣れていないので、助けを借りることができます。私の最初の調査はあまり成果がありませんでしたが、正確に何を検索すればよいか分からないこともあります。おそらく、マルチスレッドの経験が豊富な人が、TPL の理解を深めたり、より良い解決策を見つけたりするのに役立つでしょう。

私たちの会社は、中央サーバーに 1 日に数回接続し、一部のファイルと MS Access データをユーザーのマシンに同期するソフトウェアをすべてのユーザーのマシンに展開することを計画しています。最初にこの概念の負荷テストを行い、Access DB が多数の同時接続にどのように耐えられるかを確認します。

私は、クライアント アプリのように動作する (ネットワーク ロケーションとの接続と同期) .NET アプリケーションを作成する任務を負っていますが、これを複数のスレッドで同時に実行します。

これは、マルチスレッドを処理し、各スレッドから戻り値を簡単に取得するための最良の (最新の) 方法のように思われるため、タスク並列ライブラリ (TPL) に慣れてきました。ただし、私が理解しているように、TPL は、可能な限り高速に実行するために各「タスク」を実行する方法を決定し、使用可能なコア間で作業を分割します。たとえば、2 コアのマシンで 30 の同期ジョブを実行するとします。TPL は各コアで 15 ずつ順番に実行されます。これは、私の負荷テストが同時に最大 2 つの接続で Access DB にヒットすることを意味します。多くの同時接続でデータベースにアクセスしたい。

4

2 に答える 2

2

を指定することで、TPL に強制的にこれを実行させることができますTaskOptions.LongRunning。Reflector によると(ただし、ドキュメントによるとは限りません)、これは常に新しいスレッドを作成します。この安全な本番使用に頼ることを検討します。

通常のタスクは実行を保証しないため、実行できません。ローカルの問題を解決するためにプロセスのグローバル設定を変更しているため、 MinThreads を設定することは(本番環境では)恐ろしい解決策です。それでも、成功が保証されているわけではありません。

もちろん、スレッドを開始することもできます。ただし、エラー処理があるため、タスクの方が便利です。このユースケースでスレッドを使用しても問題はありません。

于 2012-08-18T15:49:57.740 に答える
1

あなたのコメントに基づいて、そもそも Access の使用を再考する必要があると思います。データベースが特定のサイズに成長すると、うまくスケーリングできず、問題が発生します。特に、これが単にネットワーク上の一部のファイル共有から提供される場合.

単一のマシンから負荷を試してシミュレートすることはできますが、それはあなたが達成しようとしていることをよく表しているとは思いません。

SQL Server Express の使用を検討しましたか? これは基本的に、本格的な SQL Server の微調整バージョンであり、ニーズにより適している可能性があります。

于 2012-08-18T15:12:13.177 に答える