Maison >développement back-end >C++ >Comment faire % CPU

Comment faire % CPU

Patricia Arquette
Patricia Arquetteoriginal
2025-01-09 06:56:43405parcourir

How to % CPU

Une question courante parmi les administrateurs système : "Comment puis-je générer rapidement une charge CPU factice sur cette machine ?" Si une simple charge CPU à 100 % sur un ou plusieurs cœurs est suffisante, la création d'une solution personnalisée est étonnamment simple.

La solution monocœur (One-Liner)

Cette seule ligne de code C, compilée et exécutée, fixera un cœur à 100 % d'utilisation :

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

Compilez en utilisant gcc -o stressme stressme.c (ou cl stressme.c sous Windows) et exécutez avec ./stressme (ou stressme.exe). Pour stresser plusieurs cœurs, exécutez simplement plusieurs instances du programme.

Solution multicœur (multithread)

Pour des tests de stress multicœurs plus contrôlés, pensez à cette version multithread utilisant 4 threads 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>

Compilez avec gcc -o multistress multistress.c -pthread.

Comment ça marche

La fonctionnalité principale est une simple boucle infinie (while (1) {}). Au niveau de l'assemblage, cela se traduit par une instruction jmp continue, maximisant l'utilisation du processeur. Les systèmes d'exploitation multitâches préemptifs modernes permettent à cette boucle de consommer du temps processeur sans rendre le système complètement insensible ; le processus peut toujours être terminé. En revanche, les anciens systèmes multitâches coopératifs se bloqueraient probablement à cause d’une telle boucle.

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

_start:
    jmp _start</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn