C# 有可能睡眠一定的周期吗

C# 有可能睡眠一定的周期吗,c#,sleep,cpu-cycles,C#,Sleep,Cpu Cycles,我想知道是否有可能让线程在一定的CPU周期内休眠 我考虑过只插入“nop”,但我不确定它们是否得到了优化,我希望有一个高级别的解决方案 有什么好东西可以推荐给我吗?如果不是,我能阻止手动插入的“nop”在不禁用所有优化的情况下得到优化吗? 问候 卢卡斯·哈弗利格 编辑:另一个问题是:是否可以测量某个代码片段在执行过程中所需的周期数?简而言之,不可以,因为周期和指令之间没有1:1的映射(实际上,每个周期执行许多指令),并且当您有指令流水线之类的东西时,分支预测和推测执行它显然变得不可预测 另一个原

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

我考虑过只插入“nop”,但我不确定它们是否得到了优化,我希望有一个高级别的解决方案

有什么好东西可以推荐给我吗?如果不是,我能阻止手动插入的“nop”在不禁用所有优化的情况下得到优化吗? 问候

卢卡斯·哈弗利格


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

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

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

最后,即使可以在硬件中使用,Windows API(在.NET内部使用)除了以毫秒为单位的时间跨度外,不会公开任何其他睡眠参数(而毫秒可能是数万个CPU周期)


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

一些高级编译器允许将程序的某些部分排除在优化之外,甚至在该部分设置特定的优化级别。见鬼,即使是Delphi 5也允许这样做,但我还没有在VisualStudio中看到这样的编译器指令。你看过System.Threading.Thread.SpinWait吗?因为我还没有完全绑定到C#切换到类似C++/C的东西会添加此功能吗?Windows是一个多线程系统,您永远不会知道在开始和完成之间解析了多少CPU周期。C#是一种解释语言,并且经过部分优化,您永远无法知道代码将使用多少CPU周期。在谈论c#时,这个问题实际上并不相关。Profiler是第二个问题的答案。。。第一部分的目标还不清楚——若你们真的需要精确测量的周期数——检查CPU手册,找到具有最稳定计时的指令,并在循环中使用它们(可能需要针对特定的CPU系列)。