我有以下代码:
while(flag)
{
Thread.SpinWait(1);
}
以下是SpinWait
in的实现Rotor(sscli20\clr\src\vm\comsynchronizable.cpp)
FCIMPL1(void, ThreadNative::SpinWait, int iterations)
{
WRAPPER_CONTRACT;
STATIC_CONTRACT_SO_TOLERANT;
for(int i = 0; i < iterations; i++)
YieldProcessor();
}
FCIMPLEND
调用时会Thread.SpinWait
内联吗?
如果不是,则在每个循环周期中,它会花费更多的时间stack operations(push and pop)
并消耗更多的CPU执行资源。
如果是,如何clr
实现这一点,而ThreadNative::SpinWait
作为标准功能指令序列实现,包括堆栈操作(推送和弹出)?
通过对 Eren 的测试,在调试模式下不会发生内联。是否可以 clr 优化和生成内联代码?
摘要:感谢您的回答。我希望有一天 clr 可以通过一种机制(例如 MethodImplOptions.InternalCall)内联预编译代码。然后它可以消除堆栈操作并将大部分时间花在检查标志和旋转等待上(消耗的cpu资源比nop少)。