You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

ARM64架构下Windows内核CPU空闲时间处理机制技术问询

ARM64架构下Windows内核的CPU空闲处理机制

你写的测试代码while(1) { YieldProcessor(); }会拉满CPU的原因很直接:YieldProcessor()在ARM64上的作用仅仅是让当前线程放弃剩余时间片,触发调度器重新选择就绪线程。如果系统里没有其他可运行的线程,调度器会立刻把这个测试线程重新调度到核心上执行,相当于核心一直在空转循环,自然会导致CPU占用率骤升、设备过热。

当系统处于真正的空闲状态(无就绪线程待执行)时,Windows内核会让CPU核心进入低功耗休眠状态,而非自旋等待。针对ARM64架构,内核主要依赖以下两类指令实现空闲处理:

  • WFI(Wait For Interrupt):这是最核心的空闲指令,执行后CPU会进入低功耗状态,直到有中断触发(比如定时器中断、外设中断)才会被唤醒。每个CPU核心的专属空闲线程(Idle Thread)在无任务时,就会执行这条指令让核心休眠。
  • WFE(Wait For Event):功能类似WFI,但唤醒条件扩展为事件(包括中断或其他核心通过SEV指令发送的事件),多用于多核同步场景下的空闲处理。

内核的空闲线程是系统默认创建的核心专属线程,当核心没有其他任务可执行时,调度器会切换到该线程,通过上述指令将核心拉至低功耗状态,此时CPU占用率会降至接近0,也不会产生无意义的功耗和发热。

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

火山引擎 最新活动