为了账号安全,请及时绑定邮箱和手机立即绑定

如何让CPU满载运行(100%占用)

多年来,我与许多系统管理员打交道,每年至少会有人问我两回同样的问题:“我需要在这台机器上快速制造一些假的CPU负载,我该用哪个CPU压力测试软件?”

如果我们只是需要非常基础的需求(即我们只想看到一个或多个核心达到100%的CPU使用率),或许我们可以考虑自己动手。

一句简洁的话

我们只需要将这一行C代码放进一个文件里,使用gcc -o stressme stressme.c(或在Windows上用cl stressme.c)进行编译,然后运行它,使用./stressme(或运行stressme.exe)。

这段代码定义了一个主函数,它包含一个无限循环,这个循环会一直运行下去,直到程序被外部因素中断。

切换到全屏模式,退出全屏

当程序运行时,我们会看到某个核心的CPU使用率达到了100%。如果有多核心,我们就可以分别在每个核心上运行该程序。

多线程技术

或者我们也可以使用线程,这里有一个使用了4个POSIX线程(POSIX threads)的例子。


```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], 0, loop, 0);
    // 暂停程序执行直到接收到一个信号
    pause();
}

全屏模式 退出全屏

(构建时请加上 -pthread 标志,如下所示:gcc -o multistress multistress.c -pthread

这为啥管用?

我们正陷入一个无限循环。当你查看C语言一行代码的汇编代码时,你会发现CPU一直在忙着做同一件事:尽可能快地执行跳转指令(jmp)。

    global _start

    _start:
        jmp _start  # 全局变量_start: 跳转到_start (形成无限循环)

全屏模式 切换回正常模式

如果我们使用的是旧的操作系统,采用协同多任务处理,那么这样的无限循环很可能使系统变卡。而在现代抢占式多任务处理系统中,无限循环会耗尽所有处理器时间,但仍可终止。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
手记
粉丝
43
获赞与收藏
187

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消