time(),gettimeofday()及GetTickCount()效率比较

2024-04-12 01:18

本文主要是介绍time(),gettimeofday()及GetTickCount()效率比较,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自:http://1.guotie.sinaapp.com/?p=157

time()和gettimeofday()是linux的系统调用,GetTickCount()是windows的函数。

time:返回至1970-1-1 00:00:00至今的秒数;

gettimeofday:除了返回秒数外,还有纳秒数,用于更精确的计时;

GetTickCount:返回系统启动至今的毫秒数

使用三个函数,分别调用1千万次,测试结果如下:

time:约967毫秒;

gettimeofday:约1800毫秒;

GetTickCount:约70毫秒;

可见,GetTickCount要快很多很多,在linux系统下,频繁使用time及gettimeofday严重影响效率。

参考资料:

Linux 下高性能用户空间时间服务_DreamFreeLancer的博客-CSDN博客

文中给出了在linux下获得毫秒级时间的思路,并给出了相关代码。

测试代码如下:

linux:

[c]
#include <stdio.h>
#include <string.h>
#include <sys/time.h>

#define TEST_LOOPS 10000000

int main()
{
time_t tm;
struct timeval tv1, tv2, tv_test;
int i;

gettimeofday(&tv1, NULL);
for(i = 0; i < TEST_LOOPS; i ++)
{
gettimeofday(&tv_test, NULL);
}
gettimeofday(&tv2, NULL);

printf("run gettimeofday %u times, used %u usec.\n", TEST_LOOPS,
(tv2.tv_sec – tv1.tv_sec) * 1000000 +
tv2.tv_usec – tv1.tv_usec);

gettimeofday(&tv1, NULL);
for(i = 0; i < TEST_LOOPS; i ++)
{
time(&tm);
}
gettimeofday(&tv2, NULL);
printf("run time %u times, used %u usec.\n", TEST_LOOPS,
(tv2.tv_sec – tv1.tv_sec) * 1000000 +
tv2.tv_usec – tv1.tv_usec);

return 0;
}
[/c]

windows:

[c]
// tick.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "Windows.h"

#define TEST_LOOPS 10000000

int _tmain(int argc, _TCHAR* argv[])
{
int i = 0;
unsigned int tv1, tv2, tv_test;

tv1 = GetTickCount();
for(; i < TEST_LOOPS; i ++)
{
tv_test = GetTickCount();
}

tv2 = GetTickCount();

printf("run GetTickCount %u times, used %u msec, current tick: %u.\n",
TEST_LOOPS, tv2 – tv1, tv2);

return 0;
}

[/c]

Related posts:

  1. Linux下锁对性能的影响有多大(进程版本)?
  2. socket通信,nonblocking与block发送延迟的测试——client端代码
  3. 多线程的内存池能够提高效率吗?!
  4. Linux x86_64下malloc最大能够分配多少内存[多线程版本]?
  5. __sync_fetch_and_add的测试
  6. 应用可分配的最大内存及malloc

(187条消息) time(),gettimeofday()及GetTickCount()效率比较_MrBetter先生的博客-CSDN博客_gettimeofday效率高吗

这篇关于time(),gettimeofday()及GetTickCount()效率比较的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/895700

相关文章

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

关键字synchronized、volatile的比较

关键字volatile是线程同步的轻量级实现,所以volatile性能肯定比synchronized要好,并且volatile只能修饰于变量,而synchronized可以修饰方法,以及代码块。随着JDK新版本的发布,synchronized关键字的执行效率上得到很大提升,在开发中使用synchronized关键字的比率还是比较大的。多线程访问volatile不会发生阻塞,而synchronize

linux 下Time_wait过多问题解决

转自:http://blog.csdn.net/jaylong35/article/details/6605077 问题起因: 自己开发了一个服务器和客户端,通过短连接的方式来进行通讯,由于过于频繁的创建连接,导致系统连接数量被占用,不能及时释放。看了一下18888,当时吓到了。 现象: 1、外部机器不能正常连接SSH 2、内向外不能够正常的ping通过,域名也不能正常解析。

python内置模块datetime.time类详细介绍

​​​​​​​Python的datetime模块是一个强大的日期和时间处理库,它提供了多个类来处理日期和时间。主要包括几个功能类datetime.date、datetime.time、datetime.datetime、datetime.timedelta,datetime.timezone等。 ----------动动小手,非常感谢各位的点赞收藏和关注。----------- 使用datet

stl的sort和手写快排的运行效率哪个比较高?

STL的sort必然要比你自己写的快排要快,因为你自己手写一个这么复杂的sort,那就太闲了。STL的sort是尽量让复杂度维持在O(N log N)的,因此就有了各种的Hybrid sort algorithm。 题主你提到的先quicksort到一定深度之后就转为heapsort,这种是introsort。 每种STL实现使用的算法各有不同,GNU Standard C++ Lib

研究生生涯中一些比较重要的网址

Mali GPU相关: 1.http://malideveloper.arm.com/resources/sdks/opengl-es-sdk-for-linux/ 2.http://malideveloper.arm.com/resources/tools/arm-development-studio-5/ 3.https://www.khronos.org/opengles/sdk/do

性能测试工具 wrk,ab,locust,Jmeter 压测结果比较

前言 在开发服务端软件时,经常需要进行性能测试,一般我采用手写性能测试代码的方式进行测试,那有什么现成的好的性能测试工具吗? 性能测试工具 wrk,ab,locust,Jmeter 压测结果比较 详见: 性能测试工具 wrk,ab,locust,Jmeter 压测结果比较 Jmeter性能测试 入门

Hbase Filter+Scan 查询效率优化

Hbase Filter+Scan 查询效率问题 众所周知,Hbase利用filter过滤器查询时候会进行全表扫描,查询效率低下,如果没有二级索引,在项目中很多情况需要利用filter,下面针对这种情况尝试了几种优化的方案,仅供参考,欢迎交流。 根据业务要求,作者需要根据时间范围搜索所需要的数据,所以作者设计的rowKey是以时间戳为起始字符串的。 正确尝试: 1.scan 设置 开始行和结

如何提高开发的效率,让老板不知所措的给你发工资

设计模式 UML JSP 编程 数据结构 1.你可能会常常发现,写了一段代码后,编译程序时是一大堆的出错 (原因:语法不熟)  ──别担心,这是每个程序员必须经历的事,这时候你就需要更大的耐心及细心,对每一行代码进行仔细人阅读并改正,这个很重要,这可以培养你的理解代码能力,所以要常读程序,不要等到程序运行以后才知道你的程序的结果。  ──如何避免:在写代码以前,要认真的学习计算机语

MongoDB学习—(6)MongoDB的find查询比较符

首先,先通过以下函数向BookList集合中插入10000条数据 function insertN(obj,n){var i=0;while(i<n){obj.insert({id:i,name:"bookNumber"+i,publishTime:i+2000})i++;}}var BookList=db.getCollection("BookList")调用函数,这样,BookList