IO完成后的Windows线程切换延迟 - 微秒或毫秒

时间:2012-12-07 19:20:13

标签: windows data-processing thread-state

我正在尝试确定在IO操作完成时切换线程的大致时间延迟(Win 7,Vista,XP)。

我(我想)知道的是:

a)线程上下文切换本身在计算上非常快。 (非常快,我的意思是方式在1ms以下,甚至可能在1us以下? - 假设一台相对快速,卸载的机器等。)

b)循环时间片量子大约为10-15ms。

我似乎无法找到有关从(高优先级)线程变为活动/信号的典型延迟时间的信息 - 例如,通过同步磁盘写入完成 - 并且该线程实际上再次运行。

,例如,我至少读过一个地方,所有非活动线程都保持睡眠状态,直到~10ms系统量程到期,然后(假设它们已准备就绪),它们几乎同步地重新激活。但在另一个地方,我读到线程完成I / O操作与激活/发信号并再次运行之间的延迟是以微秒为单位,而不是毫秒。

我的询问背景与从高速摄像头捕获和连续流写入SSD阵列的SSD有关,除非我能在先前的写入完成后在1ms内完成新的写入(这将是最好,如果平均不到1 / 10ms),这将是有问题的。

非常感谢有关此问题的任何信息。

谢谢, 大卫

1 个答案:

答案 0 :(得分:6)

线程上下文切换的成本在2,000到10,000 cpu周期之间,因此需要几微秒。

当线程在发出完成信号的同步句柄上阻塞时,I / O完成很快。这使得Windows线程调度程序暂时提升了线程优先级。这反过来使可能(但不保证)被选为获得处理器喜爱的线程。所以这通常是微秒,而不是毫秒。

请注意,磁盘写入通常会通过文件系统缓存。这使得WriteFile()调用一个简单的内存到内存副本,不会阻塞该线程。它以内存总线速度运行,每秒5千兆字节以上。然后以懒惰的方式将数据写入磁盘,线程不会因此而涉及或延迟。当文件系统缓存填充到容量并且您不使用重叠I / O时,您将只会慢速写入。如果您编写视频流,这肯定是可能的。 RAM的数量有很大的不同。并且SSD控制器不是一样的。没有什么可以预先说明的,你必须进行测试。