1.1CPU

来源:互联网 发布:深圳网络推广培训 编辑:程序博客网 时间:2024/05/07 07:00

1.1CPU

看到这个CPU使用率就想到:

以前使用电脑的时候,有时候会遇到这样的情况:有些进程“死”掉了(可以认为是僵死),这个时候看到那个进程的CPU使用率是50%。于是我想,我的笔记本貌似是双核的?所以,这样一个进程(线程)最多也就占用一个核?

 

所以,写了一个程序cpu.cpp,一直循环。

int main() {

    while(1) {}

return 0;

}

 

cl /EHsc cpu.cpp

Microsoft (R) C/C++ Optimizing Compiler Version 17.00.50727.1 for x86

 

运行的时候,发现占用率是25%;然后再开了一个cmd,运行,两个每个是是25%,加起来就是50%

 

这个现象让我去考虑这几个问题:

1CPU占用率的是如何计算出来的?【上网查】

2、我的笔记本CPU是双核的?双核双线程?这个以前没关注过【上网查】

3、既然开两个是50%,我可以写一个程序,启动两个线程,然后达到50%,可行吗?【关于多线程编程,以前都没有研究过】

 

查资料:

 

2、笔记本的CPUIntel 酷睿 i5 450M2.4G Hz,具备双核心四线程处理能。

l Multi-core processor,是在一个单一的计算组件中,加入两个或两个以上的独立实体中央处理单元(在此,称为core,核心)。

l 超线程(HT, Hyper-Threading)是英特尔研发的一个技术,实现在一个实体CPU中,提供两个逻辑线程。

每个单位时间内,一个CPU只能处理一个线程(thread),如果想要在一单位时间内处理超过一个线程是不可能的,除非是有两个CPU的实体单元。双核心技术是将两个一样的CPU放置于一个封装内(或直接将两个CPU做成一个芯片),而英特尔的HT技术是在CPU内部仅复制必要的资源、让CPU模拟成两个线程;也就是一个实体核心,两个逻辑线程,在一单位时间内处理两个线程的工作,模拟实体双核心、双线程运作。

 

1、查到WindowsCPU使用率的定义 

a) CPU使用率:在任务管理器的刷新周期内CPU忙的时间与整个刷新周期的比值。 

b) 任务管理器默认的刷新周期是1s

 

3、于是想到,每秒设置一定百分比的sleep时间,这样可行?经查,Sleep函数可以设定sleep时间,但是如何让程序在非sleep的其他时间保持工作呢?能够使用一个时间的设置像sleep那样?

【方法1

想到采用循环一定的次数,但是没有想过这个次数可以通过汇编代码大致判断

CPU 2.4G Hz,循环次数采用9,600,000(间隔10ms),看到CPU占用率20%左右。之后需要做的就是调整循环的次数。

9,600,000 20%

4,800,000 17-18%

2,400,000 14% (设置成100ms,同时次数×10,差别不大)

 

这个方法确实不方便。

【方法2

能够使用一个时间的设置像sleep那样,这个就是用GetTickCount

设置间隔为10mscpu占用率20%左右。(猜测,调度开销比较大?)

设置间隔为20mscpu占用率17%左右。

设置间隔为100mscpu占用率13-14%左右。

0 0
原创粉丝点击