3. 事实果真如此么?关于”三多“话题
  多核多进程多线程技术的发展使得运算效率不断提高的同时,也给码农们带来新的烦恼。
  3.1 多核计算
  上面已经知道了clock函数的实现是基于时钟计时单元的。问题出在了cpu的时钟计时单元上。当采用多核cpu时,进程或线程调
  用clock,记录了当前核时钟。但在下次调用clock之前很可能发生cpu调度,进程或线程被调度到其他cpu上运行。这导致两次取得
  计时单元并不是同一个cpu的,产生计时错误。但究竟这个误差有多大,有待实验论证。
  3.2 多进程计算
  上面通过time函数进行了验证,clock函数计算的时间貌似是等于用户CPU时间+系统CPU时间。果真如此么?我们再次对测试代码
  进行修改,将循环次数减少至一千次,并在空循环里加一句
  system("cd");
  这一句用于模拟子进程的运行,这里图方便选择系统进程作为子进程。
  运行shell命令
  time ./test
  显示结果
  Time to do 1000 empty loops is 0.010000 seconds
  real 0m3.492s
  user 0m0.512s
  sys 0m2.972s
  这个实验说明了,clock函数并没有考虑CPU被子进程消耗的时间。
  3.3 多线程计算
  上面提到了三个时间Real time, User time和Sys time。real time > user time + sys time 这种关系始终成立么?
  答案是否定的。原因在于并行计算。现在再次回忆一下这三种时间的概念:
  Real指的是实际经过的时间,User和Sys指的是该进程使用的CPU时间。
  1. Real是墙上时间(wall clock time),也是进程从开始到结束所用的实际时间。这个时间包括其他进程使用的时间片和进程阻塞的时间(比如等待I/O完成)。
  2. User指进程执行用户态代码(核心之外)所使用的时间。这是执行此进程所消耗的实际CPU时间,其他进程和此进程阻塞的时间并不包括在内。
  3. Sys指进程在内核态消耗的CPU时间,即在内核执行系统调用所使用的CPU时间。
  那么,什么情况下进程开始到结束所经过的时间会比进程所消耗的用户时间和系统时间(user time + sys time)小呢?
  User+Sys为进程所使用的实际CPU时间。在多处理器的系统上,一个进程如果有多个线程或者有多个子进程并行执行,可能导致Real time比CPU time(User + Sys time)要小,这是很容易理解的。