测试方法

gettimeofday 和 clock_gettime的7种类型时间的对比。
clock_gettime类型如下

类型 含义
CLOCK_REALTIME 从1970.1.1到目前的时间
CLOCK_MONOTONIC 系统启动到现在的时间
CLOCK_THREAD_CPUTIME_ID 线程所消耗的时间
CLOCK_PROCESS_CPUTIME_ID 进程所消耗的时间
CLOCK_MONOTONIC_RAW 基于硬件时间
CLOCK_REALTIME_COARSE 不精确的REALTIME
CLOCK_MONOTONIC_COARSE 不精确的启动时间

固定执行次数,统计消耗时间。

测试代码

#include <stdio.h>
#include <time.h>
#include <sys/time.h>//#define LOOP_TIMES   10000000
#define LOOP_TIMES   5000000
#define GTOD_FLAG    ~0const char* timetype_str[7] = {"CLOCK_REALTIME",
"CLOCK_MONOTONIC",
"CLOCK_THREAD_CPUTIME_ID",
"CLOCK_PROCESS_CPUTIME_ID",
"CLOCK_MONOTONIC_RAW",
"CLOCK_REALTIME_COARSE",
"CLOCK_MONOTONIC_COARSE"
};// flag GTOD_FLAG getimeofday
static inline void do_gettime(unsigned int flag, int loop_times)
{int i = 0;struct timeval tv;struct timespec time1 = {0, 0};if (flag == GTOD_FLAG) {for (i = 0; i < loop_times; i++) {gettimeofday (&tv, NULL);}} else {for (i = 0; i < loop_times; i++) {clock_gettime(flag, &time1);}}
}// flag ~0 gettimeofday,  flag 0 - 3, clock_gettime
int gettime_test(unsigned int flag, int loop_times)
{int i = 0;long s_intval;long us_intval;long interval = 0;struct timeval begin;struct timeval end;gettimeofday (&begin, NULL);do_gettime(flag, loop_times);gettimeofday (&end, NULL);s_intval = end.tv_sec - begin.tv_sec;us_intval = end.tv_usec - begin.tv_usec;interval = s_intval * 1000 + us_intval/1000;printf("%d times cost %ldms\n", loop_times, interval);return 0;
}
void gettimeofday_test(int loop_times)
{printf("gettimeofday\n");gettime_test(GTOD_FLAG, loop_times);printf("\n");
}void clock_gettime_test(int loop_times, unsigned int flag)
{printf("clock_gettime type: %s\n", timetype_str[flag]);gettime_test(flag, loop_times);printf("\n");
}int main()
{int flag = 0;gettimeofday_test(LOOP_TIMES);for (flag = 0; flag < 7; flag++)clock_gettime_test(LOOP_TIMES, flag); return 0;
}

测试结果

显而易见,gettimeofday()性能明显优势,clock_gettime各种类型时间获取差距不大,不精确的时间稍微快一点。
吐槽一下笔记本CPU单核性能太弱,8750H跑这个循环500万次,比家里台式机2700x跑这个循环1000万次的时间还长。

ckun@ubuntu:~/gettime$ ./a.out
gettimeofday
5000000 times cost 3325msclock_gettime type: CLOCK_REALTIME
5000000 times cost 4067msclock_gettime type: CLOCK_MONOTONIC
5000000 times cost 4140msclock_gettime type: CLOCK_THREAD_CPUTIME_ID
5000000 times cost 4408msclock_gettime type: CLOCK_PROCESS_CPUTIME_ID
5000000 times cost 4167msclock_gettime type: CLOCK_MONOTONIC_RAW
5000000 times cost 4091msclock_gettime type: CLOCK_REALTIME_COARSE
5000000 times cost 3914msclock_gettime type: CLOCK_MONOTONIC_COARSE
5000000 times cost 4068msckun@ubuntu:~/gettime$ lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
Address sizes:       36 bits physical, 48 bits virtual
CPU(s):              12
On-line CPU(s) list: 0-11
Thread(s) per core:  2
Core(s) per socket:  6
Socket(s):           1
Vendor ID:           GenuineIntel
CPU family:          6
Model:               158
Model name:          Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz
Stepping:            10
CPU MHz:             2201.000
CPU max MHz:         2201.0000
BogoMIPS:            4402.00

gettimeofday和clock_gettime性能对比相关推荐

  1. Java常用消息队列原理介绍及性能对比

    消息队列使用场景 为什么会需要消息队列(MQ)? 解耦  在项目启动之初来预测将来项目会碰到什么需求,是极其困难的.消息系统在处理过程中间插入了一个隐含的.基于数据的接口层,两边的处理过程都要实现这一 ...

  2. golang连接postgresql too many client_MySQL和PostgreSQL压测性能对比

    阅读使人充实,讨论使人敏捷,写作使人精确. >>> 压测业务场景文章属于互联网社区动态类场景核心功能压测案例.至于题目涉及的MySQL和PostgreSQL之间的关系,主要为业务选型 ...

  3. php下curl与file_get_contents性能对比

    为什么80%的码农都做不了架构师?>>>    上一篇讲了 <php使用curl替代file_get_contents>, 后续贴出了curl和file_get_cont ...

  4. p40与p100训练性能对比

    深度学习训练,选择P100就对了 原文:https://yq.aliyun.com/articles/238764 摘要: 本文使用NVCaffe.MXNet.TensorFlow三个主流开源深度学习 ...

  5. php vs lua,解析LUA与PHP在WEB应用的性能对比

    解析LUA与PHP在WEB应用的性能对比是本文要介绍的内容,这几天用在WEB开发的LUA框架已经完成,框架中已包括数据库操作和模板操作的功能,能够很简单方便的应用在WEB开发上.在此时我对这个LUA框 ...

  6. Jetson Nano and VIM3硬件参数对比及目标检测性能对比

    文章目录: 1 Jetson Nano and VIM3硬件参数对比及目标检测性能对比 2 Jetson nano在yolov4目标检测性能 3 VIM在yolov3.yolov3-tiny.yolo ...

  7. MyISAM与InnoDB两者之间区别与选择,详细总结,性能对比

    1.MyISAM:默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.不 ...

  8. cimage和gdi绘图效率比较_GDI+和GDI绘图性能对比实验

    龙源期刊网 http://www.qikan.com.cn GDI+ 和 GDI 绘图性能对比实验 作者:王克茹 来源:<科技创新与应用> 2013 年第 25 期 摘 要:本文通过完全相 ...

  9. 五款主流 Linux 发行版性能对比,稳而不强?

    测试结果解读 2018 即将结束,年末正是各种基准测试对比轮番出炉的时候,通过这些报告,我们可以看到 Linux 性能的各个方面在 2018 是如何发展的.但本文的这份性能对比会更加深入 -- 将研究 ...

最新文章

  1. VR视觉健康标准在穗发布 专家:VR使用不要超过45分钟
  2. python随机补边缘border
  3. 分享一个Vant Weapp小程序UI组件库
  4. dojo 的DOM操作 dojo/dom
  5. linux C/C++开发环境搭建指南
  6. DTW动态时间规整算法
  7. oracle 时间加减
  8. 浙大慕课c语言答案,程序设计入门——C语言
  9. tcpdump 命令祥解
  10. 95-872-064-源码-CEP-CepOperator源码
  11. Kafka : FileNotFoundException索引文件丢失 xxx.index (No such file or directory)
  12. 通用的实时数仓构建方法与实践
  13. 如何将本地项目提交到git服务器中
  14. git clone --depth=1引起的问题
  15. CentOS7.6上搭建阿里云OSS的C SDK
  16. 1.程序员的自我修养---简介
  17. Kubernetes 小白学习笔记(10)--搭建一个kubernetes集群-组建节点网络
  18. 大白菜U盘启动制作工具怎么用?
  19. python 过采样算法_类不平衡数据分类准确率的提升算法smote过采样方法
  20. SSD1306(OLED驱动芯片介绍)

热门文章

  1. [转贴]HSL与RGB关系及CMYK
  2. go语言调用python_golang和python互相调用
  3. 计算球面上任意两点间的球面距离(C++实现)
  4. python学习04--django集成CAS客户端
  5. 微信小程序:(更新)云开发微群人脉
  6. python海龟绘图代码大全-python海龟绘图的例子 python绘图工具用法
  7. web项目中报错:错误: 找不到或无法加载主类
  8. H3C交换机配置链路聚合二层三层
  9. cocos2dx跨平台游戏PoetryInGame
  10. 共享淡雅型产品分析商务PPT模板