You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Thread.sleep()与Thread.onSpinWait()开销对比及CPU负载测量疑问

针对Thread.sleep()与Thread.onSpinWait()的CPU负载测量指标选择

先明确两者核心行为差异:Thread.sleep()会让线程主动放弃CPU时间片,进入阻塞状态;而Thread.onSpinWait()是忙等待,线程会持续占用CPU核心做空循环(仅提示CPU可优化调度)。基于这个差异,选指标要精准匹配各自的CPU行为:

必选核心指标

  • cpu.utilization:单线程或绑定核心的CPU利用率,直接体现两者CPU占用差。sleep()的线程利用率会接近0,onSpinWait()的线程利用率会逼近100%(单线程绑核场景下),是最直观的对比指标。
  • cycles.active:线程消耗的CPU周期数。onSpinWait()会产生大量空循环的CPU周期,sleep()几乎无消耗,能量化两者的CPU资源消耗差距。

辅助验证指标

  • instructions.per.cycle (IPC):每周期执行的指令数。onSpinWait()的IPC会极低(空循环几乎没有效指令),sleep()的线程该指标无意义(线程未运行),可辅助确认忙等的低效性。
  • context.switches:上下文切换次数。sleep()会触发线程上下文切换(让出CPU给其他线程),onSpinWait()因是忙等,上下文切换次数极少,能体现两者调度行为的差异。

测量注意事项

  • 测试时用JMH的-pin参数把线程绑定到固定CPU核心,避免调度干扰,让指标更准确。
  • 聚焦单线程测量,别用全局CPU指标,否则会被其他线程负载稀释数据。
  • 多次运行取平均值,抵消系统波动的影响。

内容的提问来源于stack exchange,提问作者Sergey Tsypanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 16:45:44