多年来,我与许多系统管理员打交道,每年至少会有人问我两回同样的问题:“我需要在这台机器上快速制造一些假的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 点赞
										
				 评论
				共同学习,写下你的评论
评论加载中...
作者其他优质文章
					正在加载中
				
			感谢您的支持,我会继续努力的~
		扫码打赏,你说多少就多少
		赞赏金额会直接到老师账户
		支付方式
		打开微信扫一扫,即可进行扫码打赏哦
	 
                 
             
			 
					