我环顾四周,似乎找不到我要找的东西,但首先让我强调一下,我不是在寻找高精度的睡眠功能。
这是我要解决的问题的背景:
我制作了一个内存映射库,它的操作很像命名管道。您可以将字节放入其中,从中获取字节,并查询有多少字节可用于读/写,所有这些都是好东西。
如果它们传递 8KB 或更大的字节块,使用它进行通信的快速(主要)进程平均速度为 4GB/s。当您接近 512B 块大小时,性能下降到大约 300MB/s。
问题:
偶尔,在负载较重的服务器上,会出现非常大的延迟时间(超过 5 秒)。我对这个问题的原因的运行理论是,当发生大量传输(大于映射内存的大小)时,写入数据的进程将紧密轮询以等待已实现的循环缓冲区中有更多可用空间在内存映射的顶部。没有睡眠调用,因此轮询过程可能会无缘无故地占用 CPU!问题是,即使是最小的睡眠调用(1ms)也绝对会破坏性能。memmap 大小为 16KB,因此如果它每 16KB 休眠 1ms,性能将下降到 16MB/s 的最佳情况。
解决方案:
我想要一个我可以调用的函数,它将放弃 CPU,但对操作系统重新调度它的时间没有限制(在本例中为 Windows 7)。
有没有人有任何好的选择?/有没有人知道这样的功能是否存在?
谢谢。