Sleep(0)、Sleep(1)、SwitchToThread()

  1. 当 timeout 参数为 0 时(如 Sleep(0)),操作系统会检查可运行队列中是否有高于或等于当前线程优先级的其他就绪线程。如果有,当前线程将被移除并放弃处理器时间,让其他线程执行。如果没有高优先级的线程,当前线程将继续执行。
  2. 当 timeout 参数大于 0 时(如 Sleep(1)),当前线程会被移除一段时间,持续时间约等于 timeout 参数指定的毫秒数。通常情况下,系统的时间精度为 10 毫秒,所以任何小于 10 毫秒但大于 0 毫秒的睡眠时间都会被向上调整为 10 毫秒。
  3. 使用 SwitchToThread() 方法时,它会让出一个时间切片给其他就绪线程,而不考虑它们的优先级如何。

综上所述,如果希望当前线程在一段时间内真正休眠,最好使用 Sleep(1) 或 SwitchToThread(),因为它们可以实际让出处理器时间给其他线程。 Sleep(0) 在没有其他高优先级线程的情况下通常不会让出处理器时间,而 SwitchToThread() 会让出时间切片给其他线程(实际上,SwitchToThread() 会检查系统中是否有其他就绪线程,如果有,它会主动放弃当前线程的时间切片,让其他线程运行。但如果没有其他线程就绪,当前线程将继续执行。这个方法旨在鼓励线程主动让出时间切片,以减少资源浪费,但它并不能保证上下文切换。),而 Sleep(1) 会引发线程上下文切换(无论是否有其他就绪线程,Sleep(1) 都会引发线程上下文切换,因为它要求当前线程放弃 CPU 的使用权,并等待指定的时间。这有助于避免线程占用 CPU 时间过多,提高系统的性能和资源利用率。)。

相关推荐
wangchunyu1145 小时前
JAVA CompletableFuture异步编程实战
java·开发语言·python
paopaokaka_luck6 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
Thomas.Sir6 小时前
第9课:SpringBoot4.x Web开发基础:WebMvc自动配置、静态资源、请求参数接收
java·spring boot
程序 代码狂人7 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
2501_944521597 小时前
Deepmerge 跨端三方库仓颉适配全流程
java·python·eclipse·github
南归北隐9 小时前
Spring AI Alibaba Graph框架实现MCP数据库查询实战
java·后端·spring ai·mcp·spring ai mcp
古法老登瞎折腾9 小时前
大数据智能运维实战(九):让 AI 查日志——找到异常,也保留上下文
java·大数据·运维·人工智能·spring ai·mcp
ai大模型-探索者9 小时前
Function Call与MCP(区别、联系与实战)
java·服务器·网络
略略略咯咯9 小时前
啊啊啊啊啊
java·服务器·数据库
SL_staff9 小时前
运维救火实战:钉钉API变更致薪资计算中断,如何用可视化逻辑引擎5分钟热修复
java·开源·全栈