ホームページ >バックエンド開発 >C++ >CPU の割合を計算する方法

CPU の割合を計算する方法

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-09 06:56:43405ブラウズ

How to % CPU

システム管理者の間でよくある質問:「このマシンにダミーの CPU 負荷をすばやく生成するにはどうすればよいですか?」 1 つ以上のコアにわたる単純な 100% の CPU 負荷で十分な場合、カスタム ソリューションの構築は驚くほど簡単です。

シングルコア ソリューション (ワンライナー)

この 1 行の C コードをコンパイルして実行すると、1 つのコアが 100% の使用率で固定されます。

<code class="language-c">int main() {while (1) {}}</code>

gcc -o stressme stressme.c (または Windows では cl stressme.c) を使用してコンパイルし、./stressme (または stressme.exe) で実行します。 複数のコアに負荷をかけるには、プログラムの複数のインスタンスを実行するだけです。

マルチコア ソリューション (マルチスレッド)

より制御されたマルチコア ストレス テストについては、4 つの POSIX スレッドを使用するこのマルチスレッド バージョンを検討してください。

<code class="language-c">#include <pthread.h>
#include <unistd.h>

#define NUM_THREADS 4

void *loop(void *arg) {
    while (1) {}
}

int main() {
    pthread_t threads[NUM_THREADS];
    for (int i = 0; i < NUM_THREADS; i++) {
        pthread_create(&threads[i], NULL, loop, NULL);
    }
    for (int i = 0; i < NUM_THREADS; i++) {
        pthread_join(threads[i], NULL);
    }
    return 0;
}</code>

gcc -o multistress multistress.c -pthread でコンパイルします。

仕組み

コア機能は単純な無限ループ (while (1) {}) です。 アセンブリ レベルでは、これは継続的な jmp 命令に変換され、CPU 使用率が最大化されます。 最新のプリエンプティブ マルチタスク オペレーティング システムでは、システムが完全に応答しなくなることなく、このループがプロセッサ時間を消費できます。プロセスはまだ終了できます。 対照的に、古い協調マルチタスク システムは、このようなループが原因でフリーズする可能性があります。

<code class="language-assembly">global _start

_start:
    jmp _start</code>

以上がCPU の割合を計算する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。