セットアップ
個別のワーカー プロセスを起動してさまざまな CPU 集中型タスクを実行する Windows サービスを作成しました。サーバーとワーカーは、IPC 名前付きパイプを介して通信します。
Process.Start()
現在、単純な呼び出しでワーカーを作成しています。
かなり低スペックのデュアル コアサーバー VM で多数のワーカーを実行すると、タスク マネージャーは、各ワーカーが約 2 ~ 3% の CPU を使用していることを示します。
ただし (これは私たちを混乱させるものです)、非常に強力な8 コアサーバーで同じテストを実行すると、各ワーカー プロセスが 2 ~ 3% の CPU を使用していることがわかります。これで、より多くの CPU 'パワー' が利用できるようになったので、各ワーカーが使用する CPU の割合がはるかに少なくなると予想されます。
これはまた、低電力のサーバーでは、30 程度のワーカー プロセスが作成された後、CPU 使用率が 100% に達することを意味します。しかし、強力な CPU では、同じ数のワーカーの後で同じ制限に達します。はるかに多くのワーカーを実行できると予想されます。
問題
それで、私はいくつかの質問があります:
タスク マネージャーが教えてくれる値を誤解していませんか? CPU % 値は、すべてのコアで消費された CPU 時間ですか? もしそうなら、なぜ非常に異なるハードウェアで同じなのですか?
ワーカー プロセスを複数のコアに適切に分散させるために、何か特別な/異なることを行う必要がありますか? 現時点では、プロセスにはデフォルトのプロセッサ アフィニティがあります (したがって、どのコアでも実行できます)。
ヘルプ、アドバイス、リンクは大歓迎です。
コメントを残した人への追加情報:
質問に複雑さを加える必要はなかったので、最初は言及しませんでしたが、ワーカー プロセスはライブ ビデオ ストリームのビデオ トランスコーディングを行っています。そのため、ワーカーがそのタスクを「完了する」ことはありません。クライアントが接続されている限り、ワーカーは単に機能します。
基本的に:
- クライアントがサーバーに接続します
- サーバーは、リモート ビデオ ストリームに接続するワーカー プロセスを開始します。
- ビデオがビデオ ストリームから受信されると、ワーカーはそれをトランスコードし、トランスコードされたビデオをクライアントに送り返します。
これが他の提案に役立つかどうかわかりませんか? これまでのすべてのコメントに感謝します。