gettimeofday和clock_gettime性能对比
测试方法
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性能对比相关推荐
- Java常用消息队列原理介绍及性能对比
消息队列使用场景 为什么会需要消息队列(MQ)? 解耦 在项目启动之初来预测将来项目会碰到什么需求,是极其困难的.消息系统在处理过程中间插入了一个隐含的.基于数据的接口层,两边的处理过程都要实现这一 ...
- golang连接postgresql too many client_MySQL和PostgreSQL压测性能对比
阅读使人充实,讨论使人敏捷,写作使人精确. >>> 压测业务场景文章属于互联网社区动态类场景核心功能压测案例.至于题目涉及的MySQL和PostgreSQL之间的关系,主要为业务选型 ...
- php下curl与file_get_contents性能对比
为什么80%的码农都做不了架构师?>>> 上一篇讲了 <php使用curl替代file_get_contents>, 后续贴出了curl和file_get_cont ...
- p40与p100训练性能对比
深度学习训练,选择P100就对了 原文:https://yq.aliyun.com/articles/238764 摘要: 本文使用NVCaffe.MXNet.TensorFlow三个主流开源深度学习 ...
- php vs lua,解析LUA与PHP在WEB应用的性能对比
解析LUA与PHP在WEB应用的性能对比是本文要介绍的内容,这几天用在WEB开发的LUA框架已经完成,框架中已包括数据库操作和模板操作的功能,能够很简单方便的应用在WEB开发上.在此时我对这个LUA框 ...
- Jetson Nano and VIM3硬件参数对比及目标检测性能对比
文章目录: 1 Jetson Nano and VIM3硬件参数对比及目标检测性能对比 2 Jetson nano在yolov4目标检测性能 3 VIM在yolov3.yolov3-tiny.yolo ...
- MyISAM与InnoDB两者之间区别与选择,详细总结,性能对比
1.MyISAM:默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.不 ...
- cimage和gdi绘图效率比较_GDI+和GDI绘图性能对比实验
龙源期刊网 http://www.qikan.com.cn GDI+ 和 GDI 绘图性能对比实验 作者:王克茹 来源:<科技创新与应用> 2013 年第 25 期 摘 要:本文通过完全相 ...
- 五款主流 Linux 发行版性能对比,稳而不强?
测试结果解读 2018 即将结束,年末正是各种基准测试对比轮番出炉的时候,通过这些报告,我们可以看到 Linux 性能的各个方面在 2018 是如何发展的.但本文的这份性能对比会更加深入 -- 将研究 ...
最新文章
- VR视觉健康标准在穗发布 专家:VR使用不要超过45分钟
- python随机补边缘border
- 分享一个Vant Weapp小程序UI组件库
- dojo 的DOM操作 dojo/dom
- linux C/C++开发环境搭建指南
- DTW动态时间规整算法
- oracle 时间加减
- 浙大慕课c语言答案,程序设计入门——C语言
- tcpdump 命令祥解
- 95-872-064-源码-CEP-CepOperator源码
- Kafka : FileNotFoundException索引文件丢失 xxx.index (No such file or directory)
- 通用的实时数仓构建方法与实践
- 如何将本地项目提交到git服务器中
- git clone --depth=1引起的问题
- CentOS7.6上搭建阿里云OSS的C SDK
- 1.程序员的自我修养---简介
- Kubernetes 小白学习笔记(10)--搭建一个kubernetes集群-组建节点网络
- 大白菜U盘启动制作工具怎么用?
- python 过采样算法_类不平衡数据分类准确率的提升算法smote过采样方法
- SSD1306(OLED驱动芯片介绍)