0

有什么办法可以让线程暂停 1-2 微秒?(注意 1 微秒 = 1/1000 毫秒)。我知道有人问过这个问题,但到目前为止还没有很好的答案。这是我的情况,为什么我需要这个:

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

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

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

4

1 回答 1

1

我认为你不能在那段时间睡觉。

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

Windows 不是实时操作系统。

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

老实说,尽管这几乎可以肯定意味着设计存在缺陷。

我刚刚读过这篇文章;问题是线程模型。你有一个工人池。这本质上需要跨线程通信,这是有问题的,因为它需要操作系统服务。另一种选择是每个内核一个线程,这些线程之间具有对称性,例如,它们都可以做所有事情并且您在它们之间分担负载。

于 2012-06-23T21:20:38.587 回答