2012-12-07 105 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的字節/秒併除以幀中的平均字節來設定一個切合實際的目標。這是你的幀率上限。只要你**從不**超過它,你就會有一個緩衝鏡頭幫助你達到這個極限。走得更快,沒有任何緩衝會有好處。 –