Linux、Windows等操作系统的系统API时间函数一般涉及哪些操作,在高性能要求的程序中频繁调用,是否会影响效率?
这里并非在针对性的确定性能瓶颈,只是曾经看到有评价时间函数的调用是一个代价较高的操作,所以想知道系统时间函数在Linux或Windows下是怎样实现的,这中间涉及哪些过程,进而了解为何有时间函数的调用是“代价较高”的操作这种说法。
个人的理解,所谓开销大不大,要看参照的对象。时间函数比如gettimeofday()本身在所有系统调用里属于调用代价比较小的。之所以说他调用开销高,是因为他是一个系统调用,系统调用要完成用户态->内核态->用户态的转换,可能需要消耗上百时钟周期,和普通调用相比就很高。
对于高级静态语言来说编写长时间或者高并发的应用,一般针对时间函数做优化可以采取下面的方法,编写一个时间模块,该模块定期使用时间函数获取时间并保存,其他模块使用时间时都通过该模块来获得保存下来的时间,降低了系统调用的频率,代价是获得的时间精度有损失,要按照应用场景进行权衡。
因为是脚本程序员,所以很多人根本不会关心内存和执行效率这种问题,以至于一旦遇上,需要长时间执行,或者说需要大并发的服务就出现瓶颈,唉唉,还是关心下种问题,不要几句话就申明十多个临时数组来存东西,用N层的循环和递归来做一些基础的事情。一旦遇上像是node或者说twisted这种东西一瞬间脚本程序员就悲剧掉了。即便是js,针对那种一下午都不刷新的onePage页面,我想性能上也是问题,包容那些用ie引擎的人吧、