用于低延迟线程通信的Windows Sleep Microseconds

时间:2012-04-06 07:19:40

标签: windows multithreading communication sleep low-latency

有什么方法可以暂停线程1-2微秒? (注意1微秒= 1/1000 miliseond)。我知道这个问题已被问到,但到目前为止还没有很好的答案。以下是我需要这个的原因:

我有一台运行多个线程的服务器来为客户端的请求提供服务。其他线程通过偶尔发生的共享内存发送请求。但是,一旦发送请求,就需要尽快处理。因此,当请求在共享内存中排队时,我需要一种快速通知其中一个服务线程的方法。

使用了Windows事件对象但是从我的机器上的SetEvent()到WaitForSingleObject()返回需要6-7us(尝试设置进程/线程优先级但仍然没有太大改进)。我试图使用一个繁忙的循环让服务线程继续汇集内存,将延迟降低到1-2us,这已经足够了,但它会烧掉CPU,而请求只发送一次每分钟一次。如果我可以在循环中插入微/纳秒的睡眠,我至少可以释放CPU,同时保持低延迟。

如果有人能建议我采用另一种方式进行低于2us的延迟的线程通信,我会很高兴。感谢

1 个答案:

答案 0 :(得分:0)

我认为你在那段时间内无法入睡。

上次我测试(大约10年前,在Windows 2000上),睡眠时间不到13毫秒,导致睡眠时间为0毫秒或13毫秒。

Windows不是实时操作系统。

您可以使用高分辨率计时器在该时间段内旋转线程。

老实说,虽然它几乎肯定意味着设计存在缺陷。

我刚看完这篇文章;问题是线程模型。你有一个工人池。这固有地需要跨线程通信,这是有问题的,因为它需要OS服务。另一种选择是每个核心一个线程,这些线程之间具有对称性,例如,他们都做了一切,你分担他们之间的负担。