高パフォーマンスで実行する必要があるソフトウェアを開発していますが、Windows サービスまたは通常の Windows アプリケーションとして実行する必要があるかどうか疑問に思っています。問題は、パフォーマンスの点で両者に違いはありますか? 意味: OS スケジューラーは、Windows-Service に Windows-Application よりも多くの CPU ティックを与えるでしょうか?
1 に答える
質問に答えるには、Windows のパフォーマンス オプションの説明を参照してください。
パフォーマンス オプションを使用して、フォアグラウンド プログラムまたはバックグラウンド サービスのいずれかに対して Windows を最適化するように設定できます。バックグラウンド サービスの数は比較的少なく、CPU 時間が多いほど効率的であり、デスクトップ コンピューター上のプログラム サーバーまたは対話型プログラムは、タイム スライスが短いほど効率的であり、キーボード入力に対する応答性が向上し、より多くのスレッド (アプリケーション サーバー モードのターミナル サービスでは数千) を処理できます。
...
Foreground Applications オプションを有効にすると、状況はより複雑になります。これにより、「可変量子」の概念が導入されます。この場合、バックグラウンド タスクは、フォアグラウンド タスクが受け取るクォンタムとは異なるクォンタムを受け取ります。また、クォンタムの両方のセットは、バックグラウンド サービス用に設定されたコンピューターでスレッドが受け取るよりも短いです。現在、バックグラウンド プロセスは 3 のクォンタムを受け取り、フォアグラウンド プロセスは 9 のクォンタムを受け取ります。したがって、タイマーが切れる前にスレッドが実行される時間の長さを計算できます。
詳細については、リンク全体をお読みください。TL/DR: バックグラウンド サービスはより長い量子を受け取ります。
ただし、この設定について心配する必要があるとは思えません。何よりもまず、アプリケーションの 99.9999% は常に何もせず、一部の IO (ディスク、ネットワーク) が完了するのを待ちます。タイトなループで演算を実行しない限り、実際的な理由から、コードは実行されることはなく、常に待機しています。ブーストは何の役にも立ちません。また、タイトなループで高い CPU を使用するサービスを実際にデプロイする必要があるとは思えません。
より関連性の高いトピックは、ハイ パフォーマンス Windows プログラムを調べて、Windows で適切なパフォーマンス プログラムを作成する方法を学習することです (つまり、IO キューの完了ステータスとフレンドを使用します)。
また、CPU ブーストが必要な場合は、BIOS で CPU の省電力を無効にしてください。