场景和目的
一台计算机会因为当前CPU的占率不同情况表现出不同的稳定性和实时性以及其他性能情况。需要编写一个程序将一个CPU或者多个CPU占用到指定值的占用率,比如50%。很多工具都是直接一颗CPU占满,意义不大。故此特地写一个代码。
源代码
#include <thread>
#include <unistd.h>
#include <signal.h>
#include <functional>
#define SLEEP_TIME 8
#define SLEEP_RATE 2
bool b_exit = false;
static void my_handler(int sig)
{
b_exit = true;
}
void cpu_run(int p_cpuid)
{
cpu_set_t set;
CPU_ZERO(&set);
CPU_SET(p_cpuid, &set);
pthread_setaffinity_np(pthread_self(), sizeof(set), &set);
int64_t t = 0;
while (!b_exit)
{
for (int i = 0; i < 1024; i++)
{
for (int j = 0; j < 1024 * 1024; j++)
{
t = 123456789;
t *= 123456789;
}
if (i % SLEEP_RATE == 0)
{
std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIME));
}
}
}
if (b_exit) exit(0);
}
int main()
{
signal(SIGINT, my_handler);
int cpu_num = sysconf(_SC_NPROCESSORS_CONF);
for (int i = 0; i < cpu_num; i++)
{
std::thread *p = new std::thread(std::bind(cpu_run, i));
}
std::this_thread::sleep_for(std::chrono::hours(24));
return 0;
}
使用方式
g++ main.cpp -lpthread -std=c++17
./a.out
打开另个窗口使用HTOP观察所有CPU占比。由于各种各样的CPU性能差异,可以通过调节SLEEP_TIME和SLEEP_RATE的值来达到不同的占比情况。(注意:此处默认会将所有CPU达到同一个使用率,如果不想耗费所有CPU简单修改一下代码即可)。想要结束在运行程序窗口Ctrl+C即可。