Luk*_*ger 2 c# sleep cpu-cycles
我想知道是否有可能让一个线程睡眠一定量的CPU周期?
我想过只插入"nop",但我不确定它们是否会被优化掉,我希望得到一个高级解决方案.
有什么好看的你可以推荐我吗?如果不能阻止,手动插入的"nop"会被优化掉,而不会禁用所有优化?亲切的问候
LukasHäfliger
编辑:作为另一个问题:是否可以测量某个代码片段执行期间所需的周期数量?
简而言之,不,因为循环和指令之间没有1:1映射(实际上,每个循环执行许多指令),并且当你有像指令流水线,分支预测和推测执行这样的东西时变得无法预测.
另一个原因是没有基于CPU周期(或指令)的中断,而是根据硬件定时器中断或操作系统调度程序在给定当前时间的情况下轮询当前线程队列的线程休眠.
最后,即使它在硬件中是可能的,Windows API(.NET内部使用)也不会暴露任何其他休眠参数,而不是以毫秒为单位的时间跨度(并且毫秒可能是数万个CPU周期).
在C#中,问题是相当荒谬的,因为代码将基于当前平台进行JIT编译,这意味着您无法预测用于给定代码块的硬件指令,即使这样,您的CIL也有可能由解释器而不是JIT来执行,以减少启动延迟,并抛出CPU指令计数waaaay关闭.