代码改变世界

控制CPU曲线引发的感想

2010-03-26 15:29  邢少  阅读(...)  评论(...编辑  收藏

 

  前两天因为评论了一片文章,谁想竟然引出了“交流事件”,很是感觉憋屈!话说,某天我在园子里面游荡看看新的文章。当看到那个稿子的题目的时候,猛一看感觉挺高深的,就想仔细研究一下。

       一直觉得操作系统是程序之美的最强体现,文章“CPU曲线控制”的标题给人一种错觉,可能会涉及操作系统中对协调多核处理器发挥最强性能的问题。是每一个程序员都会感兴趣的话题。孰知看完之后有种“鸡肋”的感觉,文章所阐述的东西没有什么实际的使用意义。只是为了显示而显示,为了博客而博客,所以就有了“没有实际意义”评论了。可能作者一直都在期待赞美、崇拜的声音,我不和谐的声音地出现显得的那么刺头。理所应当的当成了“吃不着葡萄”的人,进而就是捍卫自己的文章是“高质量”的,怎么体现自己的高质量呢,首先是比你高明的人写的就是高质量。那么怎么显示自己的高明呢,首先就是语言上的贬低,那些影响园子氛围,比如“世界观比较特殊”、“小学生”、“小学语老师”、“是否有资格”等等之类的词语出现了。我郁闷啊!难道水平不如你的人只能赞美你,用一些很恶心的话恭维就对了吗?人们对稿子提出质疑是对稿子质量的一种认可,不论谁对谁错、都是一种提高,文章存在就有很重要的意义。在别人提出质疑后,恼羞成怒,进而人身攻击,我觉得很无奈,同时也对作者行为体现出的素质深深的鄙视。

       其实这是件小事情本不必如此当真,别人的素质怎么样是别人的事情。我只要决定是否鄙视就可以了,与我自身何干。问题是触景生情啊,在我和作者以笔“交流”的时候想到了一件小事情。前两天单位面试了几个人,在刚拿到简历的时候,看到一分很特别的简历〔当时还没有面试〕,一个今年要毕业的大学生,在他的技能描述中基本上罗列了所有的.net平台涉及的开发技术、框架,还有一大堆的头衔、xxx专家团队成员,xxx站长,xxx团队。当时很好奇,难道碰到天才了,应该说一个刚毕业的大学生,如果能达到这个程度的话,那这个人的真是前途无量啊。然后就上网看了一下这人的博客、还有那个xx技术站。博客的文章质量确实不错,其中的很多文章很有深度。当时自觉惭愧,因为好几个文章涉及的应用我都说不清楚。然后就是面试。几个问题下来,我感觉自己踏实了一点,为什么呢?因为他一开始给我印象是很强的,强的不像是一大学生。最后是上机,在可以查找资料的前提下,连续换了5个问题,题目的难度是由中等一直降到初级水平,结果居然都是以失败告终。在这说这个例子不是要暗喻什么,或贬低谁,或者抬高谁。只是很不能理解这个现象,在博客上那么多文章,在园子里都可以排进前200了,肯定是发布了很多高质量、高水准的文章,而且很多看文章确实是很白话,不想是整篇的摘抄。即使都是摘的、或者直接从书上拿来贴上,起码也应该知道思路或者基本的实现吧。但是很遗憾,他只是让简历上多了一串头衔,他是为了博客而博客。最后就有了一个问题:写博客写什么?我觉得可能有四种可能。

1、  传道授业解惑;

2、  学习生活笔记;

3、  乐于助人;

4、  装大尾狼;

不论出于何种可能,我都很感谢这些作者,他们很伟大!但是如果沾边第4种,我也很直白的告诉他们:你们也很可怜!

      某人也对我博客上几个肤浅的问题作出评价,认为真是太肤浅了,没有资格来学习、质疑别人的东西。但是我觉得有知识没有肤浅之说,就说天气一把抓小小的例子:包括了正则表达式、模拟登录、页面数据分析、数据抓取 正是因为浅显、所有简单易懂。对学习这几点知识的人来说是个典型的例子。 相比于一些文章中,没有任何的技术点的随笔〔先不说文章是不是经过思考理解后自己写出来的〕。我觉得前者更有意义。

      我作为一个做技术的人,一直认为“做技术是很单纯的事情!”,学习的过程就是“学习”、“思考”、“质疑”的过程。虽然现实中我知道自己的想法很理想,我的观点只能代表自己的行为准则,不能奢望别人也这么理想。在那我总是沉默,沉默不是因为无语,不是因为愤怒,而是因为喜悦。喜悦在有限的环境中,又一个人的技术生涯“死去”了。

      最后贴出一段代码,某人已经详细的罗列了代码的实现,有一点我承认,前者“翻译”的内容是现在为止最好的解决思路,但是作者是否经过的深刻的思考,是否真正的理解它美在那。我的技术水平也没有到达多么高深的程度。无法完全颠覆性的整理出别的方案。但是把代码整理了一下贴出,应该也可以说明一个问题:理解意图后,它实现起来很简单

private void button4_Click(object sender, EventArgs e)
{
double busySpan;
double idleSpan;
double start ;
//曲线显示区间
double interval = 100;
double radian = 0.0;
double step=0.01;
if (MessageBox.Show("现在开始让CPU傻掉吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
//设置优先级
System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.Highest;
while (true)
{
//曲线值
busySpan = (double)((interval/2)*(Math.Sin(Math.PI * radian) + 1));
//得到固定反向的曲线值
idleSpan=interval - busySpan;
startTime
= Environment.TickCount;
//控制曲线递增
while ((Environment.TickCount - start) <= busySpan)
{
}
//控制曲线递减
System.Threading.Thread.Sleep((int)idleSpan);
radian
+= step;

}

}
}

执行效果:

  

至于控制多核的问题,因为环境问题,我还是不用写了,这一段才是这个题目的精华所在。可以说明一定问题了