美文网首页
nginx时间精度

nginx时间精度

作者: golang推广大使 | 来源:发表于2020-04-27 15:09 被阅读0次

linux平台获取系统时间的方法有很多,比如time函数,gettimeofday函数和localtime函数等。大部分函数本质上都是通过系统调用来获取时间的。但是使用系统调用时,开销会比较大。

程序执行一次系统调用,将至少经过以下几个步骤:

  1. 应用程序调用库函数api

  2. api将系统调用号存入寄存器EAX,然后通过中断调用使得系统进入内核态

  3. 内核中的中断处理函数根据寄存器中的系统调用号,调用对应的内核函数

  4. 系统调用完成相应功能,将返回值存入寄存器EAX,返回到中断处理函数

  5. 中断处理函数返回到API中。

  6. api将寄存器EAX返回给应用程序

以上6个不在设计内核空间和用户空间的切换,系统中断处理等过程,这些无疑增加系统开销。

nginx获取时间也是通过gettimeofday函数获取的,但是nginx采用了缓存时间的办法来减少系统调用,并且每个worker进程自行维护缓存。但是采用缓存时间必然会带来一个时间精度的问题。在nginx配置中,有一条配置指令可以配置精度: timer_resolution 100ms;(设置更新时间间隔为100ms)。这个配置值越大,对系统调用gettimeofday的使用频率就越低,但是缓存的时间精度也越低。

相关文章

网友评论

      本文标题:nginx时间精度

      本文链接:https://www.haomeiwen.com/subject/ypnywhtx.html