有什么办法可以暂停1-2微秒的线程? (注1微秒= 1/1000 miliseond)。我知道这个问题已被问到,但到目前为止没有好的答案。这是我的情况,为什么我需要这个:Windows睡眠微秒用于低延迟线程通信
我有一个服务器与多个线程运行服务客户端的请求。请求由其他线程通过偶尔发生的共享内存发送。但是,一旦发送请求,就需要尽快处理。所以,当请求在共享内存中排队时,我需要一种快速的方式来通知其中一个服务线程。
使用了Windows事件对象,但它需要6-7us从SetEvent()到WaitForSingleObject()在我的机器上返回(试图设置进程/线程的优先级,但仍然没有太大的改进)。我试图使用一个繁忙的循环让服务线程保持池的内存,从而将延迟降低到1-2us,这足够好,但它会烧毁CPU,而请求只发送一次,如每分钟一次。如果我可以在循环中插入微秒/纳秒睡眠,我至少可以让我的CPU空闲,同时保持低延迟。
我会很高兴,如果任何人都可以建议我另一种方式进行线程通信延迟低于2us。谢谢
不要进入这个方向。在这种情况下(这不是实时应用),需要进行这样的睡眠表明恕我直言,一个破碎的设计。 – Matthias 2012-04-06 07:24:42
我认为这只能在“内核环”中可靠地完成。 – 2012-04-06 07:24:44
Thread.SpinWait()是一种“较便宜的方式”来执行忙等待。但是:_“请求只是每分钟发送一次”_表示不这样做。在基于分钟的情况下,你有什么问题? – 2012-04-06 07:32:24