0

小さなブロックに分割された作業ブロックがあります。各ブロックを NumberCruncher のインスタンスに割り当てたい (各インスタンスは一意の EndPoint でホストされ、サーバー上の特定のスレッドで実行される)。指定された EndPoint の NumberCruncher のインスタンスは、結果を txt ファイル形式で返す前に、クライアント プロキシから渡された数値をクランチします。

クライアント側からは、結果を返すのを待っている NumberCruncher のインスタンスにリンクされた EndPoints を含む 2 つのスレッドセーフ リストを保持する必要があると想定しています。より多くの作業が割り当てられるのを待っている NumberCruncher のインスタンスの 2 番目は?

これらのリストに項目を追加することに関して、サーバーからの複数の要求を処理するにはどうすればよいですか? 一度に追加できるのは 1 つだけなので、クライアントがサービスに「はい、リストに正常に追加されました。追加のリクエストを停止します」というメッセージを送信する必要があると想定しています。

編集

現在、収集した時系列で分析を実行しようとしています。チェックしたいさまざまなパラメーターを分割し、それらをさまざまなスレッドに割り当てるプログラム(Number Cruncher)を作成しました(PCのコア数によって決定されます)。次に、各スレッドは、割り当てられた入力で Number Cruncher を実行します。残念ながら、すべてのコアを使用している場合でも、これは私の PC で非常に時間がかかります。だから私はこの同じプログラムを複数のPC(サーバー)で実行し、すべてのサーバーに作業を割り当てる単一のプログラムを書きたかったのです。各シミュレーションには約 1 時間かかります。したがって、520時間の計算時間を見ています(つまり、単一のPCには適していません)。

4

1 に答える 1

1

私はあなたがこれを考え過ぎていると思います。

WCF では、インスタンスの数 (シングル、セッションごと、リクエストごと) と、インスタンスがシングル スレッドかマルチ スレッドかをある程度制御できます。ただし、リクエストのスレッド アフィニティを超えることはありません。

必要はありません。リクエストごとにインスタンスを構成するだけでよいようです(コーディングと状態管理の詳細に大きく依存します)。

サーバーを調整して、最大容量と許容可能な遅延を実現できます。必要がなければ、スレッド管理を台無しにしないでください。


編集

これには WCF を使用できますが、これは分散コンピューティングの問題であり、専用のソフトウェアが存在します。

ワーカー PC をサーバーとして実行することもできます。これが現在の方向性のようです。しかし、私は:

  • 作業を分割し、作業項目を管理する 1 つのサーバーを実行する
    • 「延滞」アイテムを確認して再発行する必要があります
  • コアと同じ量のワークアイテムを要求できる複数のクライアントを実行する
    • 最大負荷用に構成する必要があります。cores+2 または cores-1 の可能性があります
于 2013-05-09T17:14:58.363 に答える