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



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

我(认为我)知道的是:

a) 线程上下文切换本身在计算上非常快。(我所说的非常快,是指通常方式低于1ms,甚至可能低于1us?-假设机器相对较快,空载等)

b) 循环时间片的数量级为10-15ms。

我似乎找不到关于(高优先级)线程变为活动/发出信号(例如,通过同步磁盘写入完成)以及该线程实际再次运行的典型延迟时间的信息。

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

我询问的内容与从高速相机捕获和连续流式写入SSD的RAID阵列有关,除非我能在前一次写入以低于1ms的速度完成后开始新的写入(平均低于1/10ms最好),否则这将是有问题的。

如能提供有关此问题的任何信息,我们将不胜感激。

谢谢,David

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

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

请注意,磁盘写入通常通过文件系统缓存。这使得WriteFile()调用一个不阻塞线程的简单内存到内存副本。它以每秒5GB及以上的内存总线速度运行。然后,数据以惰性的方式写入磁盘,线程不会因此而被卷入或延迟。只有当文件系统缓存已满并且不使用重叠I/O时,您才会得到缓慢的写入。如果你写视频流,这当然是可能的。RAM的数量带来了很大的不同。SSD控制器也不一样。没有什么你可以提前推理的,你必须进行测试。

最新更新