一尘不染

Thread.Sleep少于1毫秒

c#

我想在不到1毫秒的时间内调用线程睡眠。我读到,thread.SleepWindows-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);
 }

我很高兴得到您的意见。


阅读 416

收藏
2020-05-19

共1个答案

一尘不染

你做不到 单个睡眠呼叫通常会阻塞Thread.Sleep(1)一秒以上(它取决于操作系统和系统,但以我的经验,通常会阻塞12到15毫秒之间)。

通常,Windows并非设计为实时操作系统。在Windows的普通(台式机/服务器)版本上通常无法实现这种控制。

通常可以得到的最接近的结果是旋转并消耗CPU周期,直到达到所需的等待时间(以高性能计数器衡量)。但是,这非常糟糕-
您会吃光整个CPU,即使那样,您有时还是会被操作系统抢占,并有效地“睡眠”超过1毫秒…

2020-05-19