MacOS测量函数耗时--mach_absolute_time()函数

阐述

如何测量函数耗时???

 

探讨

测量函数耗时所用的方法有很多种,这次我们先来介绍 mach_absolute_time() 相关。

 

什么是Mach?

Mach是一个用于支持操作系统研究的操作系统内核,后来被开发成UNIX中BSD的替代内核。

Mach名称野史:  (引自百度百科)

据Tevanian说,MACH,源于一个读音错误。当时他正和其他人在匹兹堡一个下雨天里一边躲避着路上的泥水坑,一边讨论着新内核的事,Tevanian开玩笑地建议他们的新微核命名为MUCK,意为“多用户通信内核”(Multi-User Communication Kernel)或“多通用通讯核心”(Multiprocessor Universal Communication Kernel)。而一个意大利同事错将MUCK发错音为MACH后,拉希德觉的不错并采用了MACH。

 

两个问题

Number 1 如何获取当前系统的Mach绝对时刻

mach_absolute_time()

返回一个基于系统启动后的时钟嘀嗒数,是一个CPU/总线依赖函数。在macOS上可以确保它的行为,并且它包含系统时钟所拥有的全部时间区域,精度达到纳秒级。

(注: 时钟嘀嗒数在每次手机重启后,都会重新开始计数,而且iPhone锁屏进入休眠之后,tick也会暂停计数)

 

Number 2 如何将嘀嗒数转换为有意义数字 (正常时间)

mach_timebase_info()

函数用于获取当前系统时钟嘀嗒数转换信息。(主要是获取当前设备的转换分子和分母)

 

mach_timebase_info_data_t  转换信息

系统时钟嘀嗒数转换信息的关系如下:

时间(ns) / 系统嘀嗒数 = 转换系数分子(.numer) / 转换系数分母(.denom)

故:

时间(ns)  = 系统嘀嗒数 * 转换系数分子(.numer) / 转换系数分母(.denom)

 

mach_absolute_time 延伸

1 CACurrentMediaTime() 函数

CACurrentMediaTime()函数底层是mach_absolute_time(), 只是最后将结果转换为秒 

 

2 mach_continuous_time() 函数

我们知道mach_absolute_time()在系统锁屏的时候是处于暂停状态,如果我们想统计包含锁屏时间,那么该如何处理呢?

答案是 iOS 10 以后,官方为我们提供的mach_continuous_time()函数,供我们使用。

 

引用:

https://www.cnblogs.com/zpsoe/p/6994811.html

https://baike.baidu.com/item/MACH/216388#2

https://blog.csdn.net/bravegogo/article/details/53188339

http://www.cocoachina.com/ios/20161216/18361.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值