weixin_42346462 2024-07-10 15:37 采纳率: 0%
浏览 11
已结题

linux系统时间切片时长问题

最近做一个时钟类的产品,想到一个问题:这个时钟产品要求时间精度1ms,对时服务器在局域网内。 但我觉得操作系统进程间分时切片的时间片在10ms~100ms。那么程序中我刚获取到服务器的时间,这时linux把CPU资源切换到其它进程了,可能是几十ms后再切换回来,这时再用从时间服务器获得的时间进行本地对时,岂不是误差在几十ms以上。

补充:看到有些回答文不对题,能不能先看看问题,我强调一下:1)不要提硬件时钟这个方案,这个不是用户方案。用户要求的方案就是从局域网内的时间服务器获取时间到本地,给本地时钟对时。2)我看到有兄弟提出用多线程的做法,多线程切换不也还是时间片的概念吗?如果我把对时放在一个单独的线程里面,我程序刚获取到服务器时间,还没来得及对时,此时时间片被切走了,下次再切回来的时候执行对时代码,误差不也是在几十ms以上。

  • 写回答

33条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-07-10 15:37
    关注
    获得0.30元问题酬金

    引自免费微信小程序:皆我百晓生

    您关于Linux系统中时间切片长度和进程调度的疑虑非常合理。确实,操作系统在进行进程调度时会有时间切片机制,导致不同进程对CPU的占用时间受到限制。这对于需要高精度时间同步的应用来说,确实可能带来一定的挑战。以下是一些建议来帮助您解决这个问题:

    1. 使用实时操作系统服务: 在许多Linux系统中,有实时调度策略和相关的工具可以用来处理时间敏感型任务。您可以尝试为运行您的时钟应用的服务或进程设置实时调度优先级。例如,使用chrt工具或设置进程的调度策略为SCHED_FIFOSCHED_DEADLINE来确保进程获得足够的连续执行时间。这有助于减少由于时间切片导致的延迟。
    2. 使用硬件时钟或RTC: 考虑使用硬件时钟(RTC)来实现高精度的本地时间同步。硬件时钟不受操作系统调度策略的影响,因此可以提供更稳定的时间基准。您可以通过读取硬件时钟来校准或同步您的系统时间。
    3. 服务器时间同步: 尽管操作系统的调度机制可能会导致时间同步的微小误差,但在局域网内的服务器与客户端之间进行时间同步时,这些误差可能是可以接受的。如果服务器已经以足够高的精度对时(例如通过NTP或其他手段),那么即使在有微小延迟的情况下同步给客户端也不会导致显著的误差累积。如果仍然担心这个问题,可以尝试采用周期性双向时间同步机制来校正误差。
    4. 优化代码逻辑: 在您的应用程序中,尽量优化与时间同步相关的代码逻辑以减少延迟。例如,一旦从服务器接收到时间数据,尽快完成所有本地操作,减少因系统调度引起的延迟对最终结果的影响。如果条件允许,采用多线程或异步处理方式也会有帮助。例如使用一个单独的线程进行网络请求和处理操作而不阻塞主线程,这可以减少主线程被抢占的风险。但这仍取决于操作系统提供的资源调度机制是否能确保此线程的优先执行。由于每个Linux内核及其负载都是独特的,只有适当的调优测试才能真正确认是否达到了期望的效果。

    请注意,尽管上述建议可以帮助减少由于操作系统调度机制导致的延迟和误差,但完全消除这些误差是不可能的。在实际应用中,您需要根据产品的实际需求和运行状况进行相应的优化和调优工作。这可能涉及深入理解操作系统的资源调度机制、性能分析工具和实时操作系统特性的应用等。如果您有更具体的代码实现问题或需要进一步的帮助和建议,请提供更多的细节,我会尽力帮助您解决具体问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 7月18日
  • 修改了问题 7月10日
  • 创建了问题 7月10日

悬赏问题

  • ¥15 咨询一下有关于王者荣耀赢藏战绩
  • ¥100 求购一套带接口实现实习自动签到打卡
  • ¥50 MacOS 使用虚拟机安装k8s
  • ¥500 亚马逊 COOKIE我如何才能实现 登录一个亚马逊账户 下发新 COOKIE ..我使用下发新COOKIE 导入ADS 指纹浏览器登录,我把账户密码 修改过后,原来下发新COOKIE 不会失效的方式
  • ¥20 玩游戏gpu和cpu利用率特别低,玩游戏卡顿
  • ¥25 oracle中的正则匹配
  • ¥15 关于#vscode#的问题:把软件卸载不会再出现蓝屏
  • ¥15 vimplus出现的错误
  • ¥15 usb无线网卡转typec口
  • ¥30 怎么使用AVL fire ESE软件自带的优化模式来优化设计Soot和NOx?