是否可以睡一定的周期

时间:2014-01-30 09:06:07

标签: c# sleep cpu-cycles

我想知道是否有可能让线程在一定数量的CPU周期内休眠?

我想过插入“nop”,但我不确定它们是否会被优化掉,我希望得到一个高级别的解决方案。

你能推荐我吗?如果不能阻止,手动插入的“nop”会被优化掉,而不会禁用所有优化? 亲切的问候

LukasHäfliger

编辑:另一个问题:是否可以测量某个代码片段执行期间所需的周期数量?

1 个答案:

答案 0 :(得分:5)

简而言之,不,因为在周期和指令之间没有1:1映射(实际上,每个周期执行许多指令),并且当你有像指令流水线,分支预测和推测的东西时 - 执行它显然变得不可预测。

另一个原因是没有基于CPU周期(或指令)的中断,而是基于硬件定时器中断或操作系统调度程序根据当前时间轮询当前线程队列的线程休眠。

最后,即使可以在硬件中使用,Windows API(.NET内部使用)也不会暴露任何其他睡眠参数,除了毫秒(以毫秒为单位)(毫秒可能还有数万个CPU周期)。

在C#中,问题是没有意义的,因为代码将基于当前平台进行JIT编译,这意味着您无法预测用于给定代码块的硬件指令,即使这样,也有可能您的CIL可能由解释器而不是JIT来执行,以减少启动延迟,并且会导致CPU指令计数关闭。

相关问题