0

私はc++で書かれた既存のアプリケーションを持っており、現在、すべての顧客のデータベースからトランザクションを読み取り、それらを処理して結果を書き戻すという、いくつかのタスクを実行しています。

私がやりたいのは、アプリの各バージョンに顧客の特定のサブセットを割り当てて、競合やデータ共有が不要になるようにすることで、トランザクション容量を増やすために、これの複数のバージョンを別々のマシンで並行して実行することです。同期。

私がやりたいのは、同じマシン上で複数のバージョンを実行し、他のマシンに分散させることです。したがって、クアッドコアボックスがある場合、アプリケーションの4つのインスタンスが実行され、それぞれがCPUの1つを利用します。

c++コードを.NETc#インターフェイスでラップし、これらすべてのプロセスを管理します。プロセスの作成、開始、停止、およびプロセス間のすべての通信と管理を担当する親c#管理サービスからローカルおよび分散されます。

私が知りたいのは、クアッドコアボックスの個別のバックグラウンドスレッドにそれぞれ4つのインスタンスを作成するかどうか、CLRと.NETが各ボックスの4つのCPUに負荷を自動的に分散するかどうか、または必要かどうかです。並列処理機能を利用するために何かをするために?

4

2 に答える 2

1

Processオブジェクトを介して(またはProcessThreadアプリの起動方法に応じて)プロセスを起動するときに、プロセスアフィニティを設定できます。

これが主題をカバーするSO投稿です(これがまさにあなたが求めているものであるかどうか100%確信が持てないので、私は(まだ)重複として閉じることに投票しませんでした)。

于 2012-06-07T16:12:36.837 に答える
1

同じボックス上の4つのプロセスでアプリケーションを実行することを意味する場合、これらのプロセスにCPU時間を割り当てる方法を制御するのはオペレーティングシステム(Windows)です。プロセスが同様の作業を行っている場合、通常、プロセッサ時間はほぼ等しくなります。

しかし、1つのプロセス内で4つのスレッドを使用することを検討しましたか?スレッドはプロセスよりもはるかに軽量であるため、個別の管理サービスは必要ありません。つまり、5つのプロセスではなく1つのプロセス(4つのスレッド)が必要になります。万が一、UNIXのバックグラウンドから来たのですか?

于 2012-06-07T16:16:26.670 に答える