`

让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,主要关注点在于处理器的制造工艺升级...

    Duilib动画控件深度解析:让界面元素舞动起来

    Duilib是一个开源的DirectUI界面库,专为Windows系统设计,使用C++编写,遵循BSD协议,适用于商业软件开发。它能够简单方便地实现大多数界面需求,包括换肤、换色、透明等功能,并支持多种图片格式。...

    恒舞动卡F70 LED控制卡软件

    恒舞动卡F70 LEDShow 2014 恒舞动卡F70 LED控制卡软件 本软件是在原光盘内完整拷贝出来的,以及控制卡照片都是原机实物拍摄。 只提供软件及照片,不提供技术支持。 如何使用以及调试安装方法等自己可参考包内使用...

    平煤矿区输电线路防止雷击和舞动灾害的研究与实践

    平煤矿区35kV及以下输电线路在遭受雷击和舞动灾害时,易引起电网大面积停电,并严重威胁煤矿的安全生产。因此,本文重点分析了矿区雷电和舞动灾害的基本活动规律,并提出了针对性的防雷及防舞动措施。这些措施经过...

    js实现舞动的小方块们,3D方块舞动,几何美感,高分web设计

    js实现舞动的小方块们,3D方块舞动,几何美感,高分web设计 js实现舞动的小方块们,3D方块舞动,几何美感,高分web设计 js实现舞动的小方块们,3D方块舞动,几何美感,高分web设计 js实现舞动的小方块们,3D方块舞动...

    屏幕测试 舞动的裸女

    屏幕测试,舞动的裸女 有函数公式计算的结果,请仔细看咯~

    基于范德波尔方程的输电线舞动数学模型建立与分析

    输电线舞动是指输电导线在风力作用下产生的不规则摆动现象,这种摆动可能引起输电线路的自激振动,从而对输电系统的安全稳定运行构成威胁。输电线舞动的问题已经引起国际社会的广泛关注,因为历史上这类舞动曾导致过...

    舞动DB2之2_从Oracle到DB2开发

    舞动DB2之2_从Oracle到DB2开发

    机械设计制造及其自动化:让机器“舞动”起来.pdf

    首先,文件的标题是《机械设计制造及其自动化:让机器“舞动”起来》,这一标题直观地表达了机械设计制造及其自动化专业如何让机器像生物一样灵活、智能地工作。 描述部分简单回顾了中国汽车工业的发展历程和车辆...

    基于分布参数微元算法的35kV线路舞动数学模型的应用

    为准确反映矿区35 kV供电线路舞动的情况,以中国平煤神马集团矿区35 kV及以下供电线路为研究对象,在输电线路舞动的三自由度动态数学模型的基础上,建立了基于分布参数微元算法的35 kV单导线输电线路舞动的数学模型。...

    舞动的排序算法 快速排序

    舞动的排序算法 快速排序 通过动画演示快速排序,很好的学习,课程资源。

    资料网2008beta1-舞动中国

    并且保留作者此版权信息 '****************************************************************************** 资料网2008beta1-舞动中国 &lt;br&gt;更新记录: 2005-6-17 前台页面制作 2005-6-18 后台页面...

    漂亮的舞动羽毛brush

    总结起来,"漂亮的舞动羽毛brush"是Adobe Photoshop中一种创新的画笔预设,它利用动态效果和羽毛形状,为数字艺术家提供了丰富多样的创作工具。通过导入和使用".abr"文件,设计师能够轻松地在作品中添加优雅而动感的...

    电子功用-基于差分GPS的输电线路导线舞动与风偏在线监测系统

    《电子功用-基于差分GPS的输电线路导线舞动与风偏在线监测系统》是一份详尽的行业文档,主要关注电力行业的安全运行和维护。这份资料深入探讨了如何利用先进的全球定位系统(GPS)技术来监测输电线路的动态行为,...

    舞动的排序算法

    有利于排序算法的更好理解,更快的学会快速排序,深入理解

    Discuz! 舞动柠檬

    舞动柠檬"是一款基于Discuz! X系列的论坛模板,主要用于提升社区网站的用户体验和视觉效果。Discuz! 是一个非常知名的开源社区论坛软件,以其强大的功能和灵活的扩展性深受广大站长喜爱。"舞动柠檬"作为其中的一款...

    舞动青春分解动作与图解。完整版.doc

    【舞动青春】是一套完整的健身操,包括多个章节,旨在通过一系列的动作锻炼身体各部位。以下是各个章节的详细说明: 预备节: 预备姿势为直立。第一拍至第二拍,双臂从两侧抬至侧上举,掌心向前;第三拍至第四拍,...

    输电线路导线舞动监测技术的设计研究资料全.doc

    "输电线路导线舞动监测技术的设计研究" 输电线路导线舞动是指风对非圆截面导线所产生的一种低频、 大振幅的导线自激振动。这种现象容易引起相间闪络、金具损坏,造成线路跳闸停电或引起烧伤导线、杆塔倒塌,导线...

Global site tag (gtag.js) - Google Analytics