Maison >développement back-end >C++ >Comment faire % 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!