讲师中心 微信公众号
AI工具推荐 视频效率加速

教程:为什么说 sleep(纳税级参数) 的纳秒级精度在绝大多数普通 windows 操作系统下都是玄学

夏涛同学_8556

夏涛同学_8556

发布时间:2026-05-31 08:00:20

|

313人浏览过

|

来源于php中文网

原创

Windows 不存在纳秒级sleep:Sleep()仅支持毫秒参数,std::this_thread::sleep_for(nanoseconds)底层仍受限于系统15.6ms计时器粒度,实际休眠常为0ns或≥15ms;高精度需分层处理——≥10ms用Sleep,1–10ms配合timeBeginPeriod,<1ms改用QueryPerformanceCounter自旋并绑核校准。

教程:为什么说 sleep(纳税级参数) 的纳秒级精度在绝大多数普通 windows 操作系统下都是玄学

因为 Windows 的 Sleep 函数根本不接受纳秒参数,所谓“sleep(纳秒级参数)”本身就是一个伪命题——它连语法都不合法,更谈不上精度是否靠谱。

Windows 的 Sleep 只认毫秒,没有“纳秒接口”

Windows API 中的 Sleep() 原型是:

VOID Sleep(DWORD dwMilliseconds);

参数类型是 DWORD(无符号32位整数),单位固定为毫秒。你传 Sleep(1) 是合法的,传 Sleep(1000) 表示 1 秒,但传 Sleep(1000000) 并不等于 1 秒——它只是个超大毫秒数(约 16 分钟),和纳秒毫无关系。C++ 标准库里的 std::this_thread::sleep_for(std::chrono::nanoseconds(100)) 虽然能编译,但底层仍调用的是 Windows 的 Sleep 或类似机制,纳秒值在进入系统调用前就被向下取整或截断。

windows-git-ops
windows-git-ops

在 Windows PowerShell 工作区执行 Git 操作时使用此技能,特别适用于创建分支、暂存、提交、合并、状态检查等。

下载

系统计时器分辨率才是真正的天花板

即使你绕过 Sleep、用 QueryPerformanceCounter + 自旋来“模拟”纳秒延迟,也受限于硬件与系统:

  • 默认 Windows 计时器粒度是 15.6ms(由 64Hz 系统时钟决定),哪怕你调用 timeBeginPeriod(1),也只能把下限压到 1ms 左右,且需管理员权限、配对调用 timeEndPeriod,否则长期拖累系统功耗和调度公平性
  • CPU 频率动态缩放(Turbo Boost / P-states)、跨核迁移、中断延迟、DPC 延迟等都会让实际唤醒时间波动在 数十微秒甚至毫秒级
  • RDTSC/RDTSCP 指令读取的时间戳虽达纳秒级,但本身执行就要 20–40ns,且在非固定频率、非绑核场景下误差不可控

“纳秒级 sleep”在通用 Windows 上不存在

操作系统不是 FPGA,内核调度、中断处理、电源管理、硬件抽象层共同构成一道天然滤波器。真实场景中:

  • 请求 sleep_for(100ns) → 实际休眠常为 0ns(直接返回)或 ≥15ms
  • 请求 sleep_for(1μs) → 多数情况被截断为 0,或退化为忙等+调度让出,结果不可预测
  • 只有在实时扩展(如 Windows IoT Enterprise + PREEMPT_RT 类补丁)、专用驱动、禁用所有后台服务、绑定单核、关闭 C-states 的极端条件下,才可能逼近 10–50μs 级别,仍远非“纳秒”

那该怎么写高精度等待?

务实做法是按需分层:

  • ≥ 10ms:直接用 Sleep(),简单可靠
  • 1–10ms:先 timeBeginPeriod(1),再 Sleep(1),注意资源清理
  • < 1ms(尤其 < 50μs):放弃休眠,改用 QueryPerformanceCounter 自旋,但必须绑核、禁 turbo、测准循环开销并校准
  • 绝对不要:把 std::chrono::nanoseconds 当作可兑现承诺,或在日志/调试中打印“已休眠 123ns”来自欺欺人

热门AI工具

更多
PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

相关专题

更多
视频服务器配置参数有哪些
视频服务器配置参数有哪些

视频服务器配置参数有处理器、内存、存储、视频编解码器、网络接口、视频输入输出接口、操作系统、安全性、环境适应性和成本。在搭建视频服务器时,需要根据实际需求和预算,合理选择这些参数,以实现高性能、高稳定性和低成本的目标。

4560

2023.10.17

linux的操作系统介绍
linux的操作系统介绍

Linux是一个灵活、稳定、安全的操作系统,适用于各种不同的应用场景,从个人电脑到服务器和嵌入式系统。想了解更多Linux的相关内容,可以阅读本专题下面的文章。

3566

2024.03.20

Linux操作系统的主要用途
Linux操作系统的主要用途

Linux操作系统用途广泛,包括:服务器运营,软件开发,科学研究和教育,嵌入式系统,以及个人电脑和笔记本电脑。想了解更多Linux的相关内容,可以阅读本专题下面的文章。

6259

2024.03.21

linux操作系统的作用
linux操作系统的作用

linux操作系统在以下领域发挥着关键作用:服务器和云计算;嵌入式系统;个人电脑和笔记本电脑;超级计算;其他领域等等。想了解更多linux操作系统的相关内容,可以阅读本专题下面的文章。

2915

2024.04.12

有哪些常见的网络操作系统
有哪些常见的网络操作系统

常见的网络操作系统有windows server、linux、unix、macos server、freebsd、cisco ios、juniper junos和hp-ux等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3484

2024.09.12

32位操作系统怎么改成62位的
32位操作系统怎么改成62位的

要将 32 位操作系统升级到 64 位,需要遵循以下步骤:1. 检查硬件和软件兼容性;2. 备份数据;3. 获取 64 位操作系统;4. 创建可启动安装媒体;5. 从安装媒体启动计算机;6. 选择“升级”选项;7. 完成安装。

3463

2025.04.02

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

20

2026.10.16

OpenJDK怎么配置Java开发环境
OpenJDK怎么配置Java开发环境

怎样用OpenJDK搭建开发环境?本专题介绍版本选择、下载安装、环境变量配置和编译运行验证,帮助你理清JDK的作用及基本配置流程,并通过简单程序检查环境是否可用,为后续项目开发做好准备。

0

2026.10.16

OpenJDK怎么部署Java应用
OpenJDK怎么部署Java应用

Java项目开发完成后,怎样部署到目标环境并正常运行?本专题介绍OpenJDK应用部署流程,涵盖运行环境准备、版本兼容检查、应用打包、启动参数配置和日志查看,帮助你理清部署前后的操作顺序,减少环境差异造成的运行问题。

0

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Conan 2 安装指南
Conan 2 安装指南

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn