编程之美

Chapter 0:


Nothing replaces hard work.

纸上得来终觉浅,绝知此事要躬行

1.知己(能力、兴趣、方向)知彼(文化、战略、标准)

Chapter 1:


1.1 CPU占用率曲线

Task:
任务管理器中的CPU占用率曲线:

  1. 直线,固定在50%
  2. 直线,参数范围(1-100)
  3. 正弦曲线

环境:

观察:
打开任务管理器,监测CPU使用率。根据肉眼观察,曲线一秒更新一次。
CPU占用为0时,是System Idle Process 占用了CPU的空闲时间。

闲下来:
进程或者在等待用户输入,或者在等待某些事件的发生,或者主动进入休眠状态。

CPU占用率:
在任务管理器的一个刷新周期内,CPU忙(执行应用程序)的时间和刷新周期总时间的比率,就是CPU的占用率。

测试:

  • 只打开idea和任务管理器时,CPU利用率如下:



    CPU占用率稳定在5-8%左右,但是过几秒会出现20%左右的未知原因的峰值,暂称之为“大狗牙”

补充:
通过观察任务管理器,发现“大狗牙”是“服务和控制器应用”、“桌面窗口管理器”、“System”和任务管理器自身等几个系统进程占用了CPU

  • 启动一个死循环线程
        Thread t1 = new Thread(){
            @Override
            public void run() {
                while(true){
                }
            }
        };
        t1.start();

CPU占用率如下:



CPU占用率稳定在32%左右,大狗牙为49%

  • 启动两个死循环线程
        Thread t1 = new Thread(){
            @Override
            public void run() {
                while(true){
                }
            }
        };
        Thread t2 = new Thread(){
            @Override
            public void run() {
                while(true){
                }
            }
        };
        t1.start();
        t2.start();

CPU占用率如下:



CPU占用率稳定在57%左右,大狗牙为70%

  • 同理,启动三个死循环线程,CPU占用率如下:

CPU占用率稳定在80%左右,大狗牙为91%

  • 启动四个死循环线程,CPU占用率如下:

CPU占用100%

对于四核四线程的CPU,启动四个死循环线程,每个线程分别可以占满25%的CPU占用率。故我们可以调控每个线程的CPU占用,来达到总计50%的CPU占用率。

根据当前测试环境的情况,我们可以使用一个线程占满25%的CPU占用率,另一个线程占用20%的CPU占用率来实现近似50%占用率的目标。

上边我们通过空循环占用满了25%的CPU使用率,如何让一个线程占用20/25=80%的单个内核使用率呢?

按照书中的介绍,要操纵CPU的使用率曲线,就需要使CPU在一段时间内(根据Task Manager的采样率)跑busy和idle两个不同循环(loop),从而通过不同的时间比例,来调节CPU使用率。

书中提及的空循环汇编代码:

next:
mov  eax, dword ptr [i]  ; i 放入寄存器
add  eax, 1              ; 寄存器加 1
mov  dword ptr [i], eax  ; 寄存器赋回 i
cmp  eax, dword ptr [n]  ; 比较 i 和 n 
jl   next                ; i 小于 n 时重复循环

我的CPU是3.19 GHz,即3.19 * 10 的9次方个时钟周期/秒
现代CPU每个时钟周期可以执行两条以上代码,取平均值两条
有共计5条代码
于是有(3 190 000 000 * 2) / 5 = 1 276 000 000,也就是说CPU一秒可以执行空循环
1 276 000 000次,降低两个数量级,令 n = 12 760 000,相应的睡眠时间改为 10 毫秒(10毫秒比较接近Windows的调度时间片)






最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容