命令提示符 window 优先于 Windows Server 2008 R2 (Windows 7)

Command prompt window priority on Windows Server 2008 R2 (Windows 7)

控制台 window 中的应用程序 运行 是否被 windows 调度程序 "less important" 处理,即 Windows 是否允许它 "sleep" 如果最小化会更长?我想我读了一些关于 Windows 如果它被最小化会降低其优先级的内容,但也许我只是混淆了一些东西。

问题是,我有一个 C 控制台应用程序(用 VS2015 编写,但是 运行 在 Windows Server 2008 R2 上,所以不幸的是没有 GetSystemTimePrecise 支持),它确实一些套接字通信,但有时接收线程(IOCP)会暂停并且数据包会合并在一起。

所以,在我的主要功能中,我写了这样的东西:

 timeBeginPeriod(1);

while (true)
{
    QueryPerformanceCounter(&start);
    Sleep(1);
    QueryPerformanceCounter(&stop);
    LogTimeElapsed(start, stop);
}

我显然没想到 Sleep(1) 会达到毫秒级精度,但令我惊讶的是,我得到了大约 50 毫秒的大量延迟,最大延迟达到 超过 120 毫秒 好几次。

当然,在此期间,还有其他活动进程在消耗 CPU(进行一些数据库导出和类似操作,总计 CPU 将达到 ~50%),但由于这是一个四核 CPU 我认为线程调度程序仍然可以防止发生如此长的延迟。

这是 运行 作为普通控制台应用程序的产物,还是我应该期待任何 Windows desktop/service 应用程序中的类似延迟?

Windows 不是实时系统,因此允许在不确定的时间内暂停任务。如果其他任务在短时间内(十分之几秒)使用 4 个内核,那么任何程序(无论是 GUI 的控制台)都可以在这段时间内暂停。由于 Windows 是一个功能丰富的 OS,除了其他任务外,许多系统服务还可以竞争 CPU,因此随时可能出现高达零点几秒的延迟

简单地说,TCP 堆栈保证程序将以正确的顺序获取在此期间接收到的所有数据,但允许在一次读取中连接多个数据包,因为 TCP 是一种流协议。所以你的程序应该为此做好准备。唯一的选择是在主计算机或专用计算机上使用实时 OS。