`

让CPU舞动起来

阅读更多
搞个CPU画图玩玩。



目标:







/**
 * let CPU draw line
 * @author 贾懂凯      QQ 305657490
 * @date  2010-10-20 下午09:36:54
 *
 */
public class CPUTest {

	public static void main(String args[]){
		int busyTime=10;//如果是单核这边的busyTime越小画出的线越正。不过双核就不一定了。
		int idleTime=busyTime;
		long startTime=0;
		//sleep 10ms each busy loop。微观上等量的busy和idle,宏观上表现为CPU的占用率为50%。
		while(true){
			startTime=System.currentTimeMillis();
			//busy loop
			while((System.currentTimeMillis()-startTime)<=busyTime);
			//idle loop
			try{
				Thread.sleep(idleTime);
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	}
};


上面的程序在我机子上实际运行效果:




/**
 * let CPU draw Sine curve
 * @author 贾懂凯      QQ 305657490
 * @date  2010-10-20 下午09:39:43
 *
 */
public class CPUTest01 {

	public static void main(String args[]){
		//角度的分割
		final double SPLIT=0.01;
		//2PI/ 分割的次数,也就是2*PI/0.01,正好是一周
		final double PI=Math.PI;
		final int COUNT=(int)(2*PI/SPLIT);//将一圈的弧度按SPLIT分成的份数
		
		
		final int INTERVAL=200;//一次循环的时间
		long[] busySpan=new long[COUNT];
		long[] idleSpan=new long[COUNT];
		int half=INTERVAL/2;
		double radian=0.0;
		for(int i=0;i<COUNT;i++){
			busySpan[i] =(long)(half+(Math.sin(PI*radian)*half));
			idleSpan[i]=INTERVAL-busySpan[i];
			radian+=SPLIT;
		}
		long startTime=0;
		int j=0;
		
		//微观上保证每个小的时间片段(200ms)中,CPU的使用率变化规律符合正弦曲线
		//因为任务管理器每隔1秒统计一次(标准更新水平下),所以1秒内统计的时候有五个微观周期,宏观表现基本表现为正弦规律。没有太大的误差。
		while(true){
			j=j%COUNT;
			startTime=System.currentTimeMillis();
			while(System.currentTimeMillis()-startTime<busySpan[j]);
			try {
				Thread.sleep(idleSpan[j]);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			j++;
		}
	}
};



这个运行效果也不好。
原因是我的Computer是Core 2的,程序是OK的。如果是单核效果会很明显。本人暂时还没找到Java控制双核CPU分配的方法。

进一步分析:
如果排除该程序程序之外的线程的CPU开销(如系统线程)和该程序不必要的CPU开销(如让Java线程停止休眠的开销),理论上一个loop的周期在任务管理器的一个刷新周期内的任何一个值最后画出的图形都是没有区别的。网上有些人的loop周期越短越好的观点实际上是不成立的。
如果考虑这些额外的开销,将loop周期定在任务管理器的刷新周期附近比较好(标准1s,慢4s,快0.5s)。

我们大家可以尝试深入的切入点:
1、找一个单核CPU验证下我的理论分析的观点是否正确。出结果了别忘了告诉我哦!
2、进一步去了解多核CPU的工作原理和Java对CPU的分配控制,实现两个核的差异化运作,也就是网上说的“左手画圆,右手画方”(网上的已经实现的例子是假的的)。

  • 大小: 15.3 KB
  • 大小: 15.4 KB
  • 大小: 17.5 KB
分享到:
评论
2 楼 luliangy 2012-04-06  
编程之美嘿嘿
1 楼 freewxy 2010-10-21  

相关推荐

    舞动游戏的脚步 三款Intel CPU评测.pdf

    【标题】:“舞动游戏的脚步 三款Intel CPU评测.pdf” 【描述】:这份文档是对Intel三款CPU的评测,包括Prescott Pentium 4、Pentium 4至尊版以及新发布的Prescott Pentium 4,主要关注点在于处理器的制造工艺升级...

    ITE第三章考试答案.docx

    设置新驱动器上的交换文件大小、使用正确的跳线设置驱动器ID号、将BIOS设置配度为自动检测主舞动器、确保PATA数据线的引脚1与连接器正确对准 * 涂抹散热音的最佳方法是什么?涂抹散热有之的更换散热器底座、涂抹散热...

    粒子发生器

    6. **性能优化**:由于粒子特效可能导致较高的CPU或GPU负载,开发者需要优化粒子系统的更新和渲染过程,如减少粒子数量、使用精灵图(sprite sheet)等。 7. **应用场景**:粒子发生器广泛应用于网页背景、加载动画...

    【RAR】水果忍者源码

    源代码中的每一行都可能隐藏着开发者的心血与智慧,它们构成了游戏的灵魂,让玩家在指尖舞动间体验到无尽的乐趣。 在“水果忍者”中,游戏逻辑的实现离不开数据结构和算法。例如,水果的生成可能运用了随机数生成...

    Kinect2插件

    1. **体感游戏**:利用Kinect2.0的骨骼追踪,可以开发类似《舞动全身》的舞蹈游戏,玩家的动作会被实时映射到游戏人物上。 2. **虚拟现实**:结合VR头显,Kinect2插件可以增强现实感,比如玩家的手势能直接影响虚拟...

    蓝桥杯单片机组国一复习资料

    单片机,也称为微控制器,是一种集成电路,集成了CPU、内存、输入输出接口等核心组件,常用于自动化控制设备。在蓝桥杯比赛中,单片机的编程和应用能力是考察的重点之一。学习单片机通常涉及汇编语言或C语言编程,...

    历年电子商务设计师真题与答案 三星级

    - B项:采用CISC技术的CPU确实具有较高的芯片设计复杂度,因为它们需要支持更多的指令和功能。 - C项:在RISC中,由于指令集相对简单,更适合采用硬布线逻辑来执行指令,以提高处理速度。 - D项:RISC指令系统的...

    linux0.01最早的linux源码

    在Linux 0.01中,可以看到早期的进程调度算法,如轮转调度(Round Robin),这是用于公平分配CPU时间的基本机制。此外,还有进程的创建、销毁以及上下文切换的实现。 3. **内存管理**: 这个早期版本的Linux使用...

Global site tag (gtag.js) - Google Analytics