你的程序运行使用了多少CPU,函数实现功能介绍

作者: 编程技术  发布:2019-09-20

图片 1


我们今天要向大家介绍的是有关C++
clock()函数的一些基本概念以及应用方式,目的就是希望能够帮助大家轻松掌握这一应用技巧。

朋友们,相信大家日夜操练,代码已经撸了不少了,在跟代码打交道的时候,大家有没有思考过一个问题,想过你的代码完成一个循环或者处理其它事件它到底花了多少时间吗?

AD:

“什么,你不是装逼吧,居然还可以知道代码运行所花的时间?”

在C++编程语言中,有许多特定的函数应用可以帮助我们实现许多不同的特定功能,方便程序员的实际开发。比如C++
clock()函数主要是帮助我们实现计时的功能。而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下:

--“没错!”,我通常会假装斯文的深吸一口中华后,意味深长的说。

clock_t clock( void );  

。。。。。。

这个函数返回从“开启这个程序进程”到“程序中调用C++ clock()函数”时之间的CPU时钟计时单元(clock
tick)数,在MSDN中称之为挂钟时间(wal-clock)。其中clock_t是用来保存时间的数据类型,在time.h文件中,我们可以找到对
它的定义:

既然装了,就是要解释清楚的。下面,我就跟大家普及普及,讲得不好,萝卜青菜滴不要,请大家猛戳图片 2死我!

#ifndef _CLOCK_T_DEFINED   typedef long clock_t;   #define _CLOCK_T_DEFINED   #endif  

图片 3

很明显,clock_t是一个长整形数。在time.h文件中,还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元,其定义如下:

大家都知道,任何计算机的硬件里都有 CPU这玩意,这哥们可不是来装逼的,它的全称是中央处理器(Central Processing Unit ),既然是带了“中央”头衔,作用也是霸气滴不行,如下:

#define CLOCKS_PER_SEC ((clock_t)1000) 
  • 处理指令,控制程序中指令的执行顺序。程序中的各指令之间是有严格顺序的,必须严格按程序规定的顺序执行,才能保证计算机系统工作的正确性。

可以看到每过千分之一秒(1毫秒),调用C++
clock()函数返回的值就加1。下面举个例子,你可以使用公式clock()/CLOCKS_PER_SEC来计算一个进程自身的运行时间:

  • 执行操作,一条指令的功能往往是由计算机中的部件执行一系列的操作来实现的。CPU要根据指令的功能,产生相应的操作控制信号,发给相应的部件,从而控制这些部件按指令的要求进行动作。比如,在控制台显示“ Hello World”!
void elapsed_time()   {   printf("Elapsed time:%u secs."n",clock()/CLOCKS_PER_SEC);   } 
  • 控制时间,时间控制就是对各种操作实施时间上的定时, 比如:不同程序对应的指令什么时候开始执行,执行多久?在一条指令的执行过程中,在什么时间做什么操作均应受到严格的控制。只有这样,计算机才能有条不紊地指挥众多的应用程序和硬件工作。

当然,你也可以用clock函数来计算你的机器运行一个循环或者处理其它事件到底花了多少时间:

  • 处理数据,主要是对数据进行算术运算和逻辑运算。
#include “stdio.h”   #include “stdlib.h”   #include “time.h”   int main( void )   {   long i = 10000000L;   clock_t start, finish;   double duration;   /* 测量一个事件持续的时间*/   printf( "Time to do %ld empty loops is ", i );   start = clock();   while( i-- ) ;   finish = clock();   duration = (double)(finish - start) / CLOCKS_PER_SEC;   printf( "%f seconds"n", duration );   system("pause");   } 

好!霸气侧漏的东西自然有它霸气的理由!由于涉及到的信息量巨大,为了不太为难大家的脑袋上扛着的这块“CPU”,今天我只讲讲我们CPU和时间的话题。要搞清楚这个话题,我们需要来点前戏:

在笔者的机器上,运行结果如下:

图片 4

Time to do 10000000 empty loops is 0.03000 seconds  

我们电脑装了很多的应用程序,这些程序可以同时执行。比如:你可以一边看着小视频,一边聊着QQ,同时你的迅雷还在下载着其他的小视频,这些老爷机(请原谅我把以前只有一块CPU的电脑称之为老爷机)只用一块CPU是怎么做到呢?

以上就是对C++
clock()函数的相关应用介绍。上面我们看到时钟计时单元的长度为1毫秒,那么计时的精度也为1毫秒,那么我们可不可以通过改变CLOCKS_PER_SEC的定义,通过把它定义的大一
些,从而使计时精度更高呢?通过尝试,你会发现这样是不行的。在标准C/C++中,最小的计时单位是一毫秒。

答案在此:操作系统(Windows、Unix 和Linux等)会把CPU进行微秒(1微秒 = 0.000001秒)级别的分片,称之为时间片,即微观上CPU分配给各个程序运行的时间,每个应用程序被分配一个极短的时间段让CPU控制其运行,这个时间段称作它的时间片,即该进程此次允许运行的时间,然后,这些应用程序在规定的时间片内运行,一旦时间结束,就马上切换给下一个程序运行,因为时间片被划分在微妙级别,所以,以我们常人这种0.2秒的反应速度看来,电脑上的程序宝宝们是同时进行的。

注:如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。而不会造成CPU资源浪费。在宏观上:我们可以同时打开多个应用程序,每个程序并行不悖,同时运行。但在微观上:由于只有一个CPU,一次只能处理某个应用程序的一小部分,如何做到对所有应用程序处理公平,主流方法就是引入时间片,每个程序轮流执行。

好!搞清楚了时间片的概念,接下来就好理解程序完成一个循环或者处理其它事件所花的时间这个概念了:

没错,它就是指 CPU 用来执行这段代码所花的时间片之和!

比如下面这段代码:

for(int i=0; i<10000; i++) ;

假设CPU运行这段代码,被分成10个时间片才能运行完,每个时间片是1微秒,那么真正所花在运行代码上的CPU时间是:

10 x 1 = 10 微秒

好!说到这里,很多同学可能会大声叫好!终于理解这个概念了!Martin 牛逼,Martin 威武!Martin xxx xxx

但是,如何获得这个时间,难道要自己去算吗?

图片 5

不会! C库已经帮我们准备了一个函数,它就是计时函数是clock(),声明如下:

#include <time.h>

clock_t clock;

描述:

clock() 函数精确的返回当前程序已运行的的CPU时间。如果要换算成秒,需要将返回的结果除以CLOCKS_PER_SEC的值,如果获取失败,则返回 -1.

在这里,有的朋友可能会吓一跳,clock_t 是啥,请原谅我还是个小白呀!!!

其实,它只是个长整形数,和long 一样一样滴! 为什么,你学会了使用typedef 自定义类型,一切都不会再感到惊讶,它其实就是:

typedef long clock_t;

或许大家另外还会有个疑问,CLOCKS_PER_SEC又是什么?那么我来告诉大家,这玩意定义在time.h文件中,它用来表示一秒钟会有多少个时钟计时单元,其定义如下:

#define CLOCKS_PER_SEC 1000)

它意味着,每过千分之一秒,我们调用clock()函数返回的值就加1。

到此为止, 大家应该就知道该怎么玩耍了吧?还不懂? 来一段代码带大家理解一下, 下面的代码带大家获取你的机器运行1千万次 -- 操作所花的时间:

#include <stdio.h>#include <stdlib.h>#include <time.h>#include <unistd.h> int main(void){     long  times = 10000000L;     clock_t start, end;     double    duration;      /* 测量一个事件持续的时间*/     printf( "执行 %ld 次循环 -- 操作所花的时间: ", times );     start = clock();      /* 程序先休息两秒,这时候不消耗CPU时间 */     usleep(2000000);     while( times-- ) ;     end = clock();     duration = (double)(end - start) / CLOCKS_PER_SEC;     printf( "%f 秒n", duration );     system("pause");      return 0;}

在我笔记本上运行的结果是:

图片 6

大家也可以在你们的电脑是执行下,看看你们的笔记本是否可以可以甩我一条街!图片 7

本文由贝博体育app发布于编程技术,转载请注明出处:你的程序运行使用了多少CPU,函数实现功能介绍

关键词: