让多核CPU占用率曲线听你指挥(Linux实现)——《编程之美》1.1继续学习

本文介绍了如何在Linux环境下,特别是Ubuntu 11.04系统中,使用gettimeofday()、usleep()等系统调用创建一个程序,使其CPU占用率呈现正弦曲线波动。通过schedtool工具,可以限制进程在特定CPU上运行,以观察和控制进程的CPU使用情况。此外,文中还提供了Python实现的类似功能代码。
摘要由CSDN通过智能技术生成

本回将尝试在Linux环境下能否在系统监视器中画出一个正弦曲线。本人环境为Ubuntu 11.04.

基本思想还是和Windows下面的相同,更换系统调用,便可以实现功能的迁移。

#include <time.h>
#include <sys/time.h>
#include <unistd.h>
#include<stdlib.h>
#include<math.h>

#define DWORD unsigned long
#define UINT64 unsigned long long
const double SPLIT = 0.01;
const int COUNT = 200;
const double PI = 3.14159265;
const int INTERVAL = 300;

int main(int argc, char* argv[] )
{
	struct timeval tms;
	DWORD busySpan[COUNT];
	DWORD idleSpan[COUNT];
	int half = INTERVAL/2, i;
	double radian = 0.0;
	for(i = 0; i < COUNT; ++i)
	{
		busySpan[i] = (DWORD)(half + (sin(PI * radian) * half));
		idleSpan[i] = INTERVAL - busySpan[i];
		radian += SPLIT;
	}
	clock_t startTime = 0;
	int j = 0;
	while(1)
	{
		j = j % COUNT;
		timerclear(&tms);
		gettimeofday(&tms,NULL);
		UINT64 startTime = tms.tv_usec;
		while(1)//clock返回该进程从启动到现在经历的毫秒数(千分之一秒)
		{
			timerclear(&tms);
			gettimeofday(&tms,NULL);
			UINT64 nowTime = tms.tv_usec;
			if((nowTime - startTime)/1000 > busySpan[j])
				break;
		}
        	if(usleep(idleSpan[j]*1000))  //精确到微秒(百万分之一秒)的函数
           		exit(-1);
		j&
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值