2012-12-07 50 views
1

我试图确定在IO操作完成时切换线程的大致时间延迟(Win 7,Vista,XP)。IO完成后的Windows线程切换延迟 - 微秒或毫秒

我(我想)知道的是:

一)主题CONTEX交换机本身的计算速度非常快。 (非常快,我的意思是典型的方式在1ms以下,甚至可能在1us以下 - 假设一个相对较快的卸载机器等)。

我似乎无法找到的信息是有关从(高优先级)线程变为活动/信号 - 通过例如同步磁盘写入完成 - 以及该线程实际再次运行的典型延迟时间的信息。例如,我至少在一个地方看到所有不活动的线程都保持睡着状态,直到~10ms的系统量程到期,然后(假设它们准备好了),它们都几乎同步地重新激活。但在另一个地方,我读到线程完成I/O操作和变为活动/信号并再次运行之间的延迟是以微秒而不是毫秒为单位来衡量的。

我的询问上下文与从高速摄像头捕获和连续流式写入SSD阵列有关,除非我可以在1ms内完成一个新写入之后开始新的写入(它会如果平均在1/10ms以下,最好),这将是有问题的。

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

谢谢, 大卫

+2

请注意,毫秒时间也可以以微秒为单位进行测量,只需再添加三个零;-) –

+0

您可以设置基准吗? –

回答

5

线程上下文2000个10000 CPU周期,所以一微秒的极少数之间切换成本。

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

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

+0

用于提及写入缓存。 –

+0

感谢Hans, 你写道:I/O完成速度快 - usecs。 您可能已经回答了我的问题,但要确认: 1)\t当前,异步磁盘写入在无限“while”循环中启动wt。重叠的IO,在下次循环完成时轮询完成。在1000fps时速度太慢...(仅供参考):流式视频立即填充系统RAM和SSD RAID卡RAM。) 2)\t思考FIFO buf,从主线程推入,在第2个线程中弹出并写入(同步?)。 3)\t问题:当第二个线程写入完成时,该线程会“立即”(us)抓住控制器以启动另一个写入? (可以使第二个线程具有高优先级。) Thx,D – TechnoFrolics

+0

每秒千视频帧?这是一条严重的消防水带。至少通过测量可写入SSD的字节/秒并除以帧中的平均字节来设定一个切合实际的目标。这是你的帧率上限。只要你**从不**超过它,你就会有一个缓冲镜头帮助你达到这个极限。走得更快,没有任何缓冲会有好处。 –