Eine häufige Frage unter Systemadministratoren: „Wie erzeuge ich schnell eine Schein-CPU-Last auf diesem Computer?“ Wenn eine einfache 100-prozentige CPU-Auslastung auf einem oder mehreren Kernen ausreicht, ist die Erstellung einer benutzerdefinierten Lösung überraschend einfach.
Die Single-Core-Lösung (One-Liner)
Diese einzelne Zeile C-Code, kompiliert und ausgeführt, legt einen Kern bei 100 % Auslastung fest:
<code class="language-c">int main() {while (1) {}}</code>
Kompilieren Sie mit gcc -o stressme stressme.c
(oder cl stressme.c
unter Windows) und führen Sie es mit ./stressme
(oder stressme.exe
) aus. Um mehrere Kerne zu belasten, führen Sie einfach mehrere Instanzen des Programms aus.
Multi-Core-Lösung (Multi-Threaded)
Für kontrolliertere Multi-Core-Stresstests sollten Sie diese Multithread-Version mit 4 POSIX-Threads in Betracht ziehen:
<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>
Kompilieren mit gcc -o multistress multistress.c -pthread
.
Wie es funktioniert
Die Kernfunktionalität ist eine einfache Endlosschleife (while (1) {}
). Auf Assembly-Ebene führt dies zu einer kontinuierlichen jmp
-Anweisung, die die CPU-Auslastung maximiert. Moderne präemptive Multitasking-Betriebssysteme ermöglichen, dass diese Schleife Prozessorzeit verbraucht, ohne dass das System vollständig nicht mehr reagiert. Der Vorgang kann weiterhin abgebrochen werden. Im Gegensatz dazu würden ältere kooperative Multitasking-Systeme aufgrund einer solchen Schleife wahrscheinlich einfrieren.
<code class="language-assembly">global _start _start: jmp _start</code>
Das obige ist der detaillierte Inhalt vonGewusst wie: % CPU. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!