1

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

我(想我)知道的是:

a) 线程上下文切换本身的计算速度非常快。(通过非常快,我的意思是通常在 1 毫秒以下,甚至可能在 1 微秒以下? - 假设一台相对较快的空载机器等)

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

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

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

我的询问上下文与从高速摄像机捕获和连续流式写入 SSD 的 RAID 阵列有关,除非我可以在先前的写入在 1 毫秒内完成后开始新的写入(最好在平均为 1/10 毫秒),这将是有问题的。

任何有关此问题的信息将不胜感激。

谢谢,大卫

4

1 回答 1

6

线程上下文切换需要 2,000 到 10,000 个 cpu 周期,因此只需几微秒。

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

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

于 2012-12-07T19:51:11.780 回答