首页 >后端开发 >C++ >如何计算 CPU 百分比

如何计算 CPU 百分比

Patricia Arquette
Patricia Arquette原创
2025-01-09 06:56:43428浏览

How to % CPU

系统管理员的一个常见问题:“如何在这台机器上快速生成虚拟 CPU 负载?” 如果一个或多个核心的简单 100% CPU 负载就足够了,那么构建自定义解决方案就会非常容易。

单核解决方案(One-Liner)

这一行 C 代码经过编译和运行后,将使一个核心的利用率达到 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn