Thread.Sleep少于1毫秒
我想在不到1毫秒的时间内调用线程睡眠。我读到,thread.Sleep
Windows-OS 都不支持。
有什么解决方案?
对于所有想知道为什么我需要这样做的人:我正在进行压力测试,并且想知道我的模块每秒可以处理多少条消息。所以我的代码是:
// Set the relative part of Second hat will be allocated for each message //For example: 5 messages - every message will get 200 miliseconds
var quantum = 1000 / numOfMessages;
for (var i = 0; i < numOfMessages; i++)
{
_bus.Publish(new MyMessage());
if (rate != 0)
Thread.Sleep(quantum);
}
我很高兴得到您的意见。
回答:
你做不到 单个睡眠呼叫通常会阻塞Thread.Sleep(1)
一秒以上(它取决于操作系统和系统,但以我的经验,通常会阻塞12到15毫秒之间)。
通常,Windows并非设计为实时操作系统。在Windows的普通(台式机/服务器)版本上通常无法实现这种控制。
通常可以得到的最接近的结果是旋转并消耗CPU周期,直到达到所需的等待时间(以高性能计数器衡量)。但是,这非常糟糕-
您会吃光整个CPU,即使那样,您有时还是会被操作系统抢占,并有效地“睡眠”超过1毫秒…
以上是 Thread.Sleep少于1毫秒 的全部内容, 来源链接: utcz.com/qa/407713.html