並行視覺化檢視中的執行緒檢視時間表報告
本文提供並行視覺化檢視中執行緒檢視時間表報告的相關資訊。
執行時間 (執行緒檢視)
當執行緒在系統的邏輯核心上主動執行工作時,[執行緒檢視] 時間表中的這些區段代表執行時間。
執行緒狀態的變更是透過核心環境參數事件來偵測。 Windows 事件追蹤 (ETW) 每毫秒會擷取一次樣本堆疊。 在非常短的綠色區段中,則可能沒有取樣。 因此,一些簡短的執行區段可能不會顯示任何呼叫堆疊。
當您按一下執行區段時,並行視覺化檢視會顯示最接近點擊位置的範例堆疊。 該樣本堆疊的位置會顯示為時間表上方的黑色箭號或插入號,樣本堆疊則出現在 [目前] 索引標籤中。
若要在目前檢視中查看所有執行區段的傳統取樣分析,請在 [可見時間表分析] 中按一下 [執行]。
I/O 時間 (執行緒檢視)
時間軸中的這些區段與歸類為 I/O 的封鎖時間關聯。 這意謂著某個執行緒正等候 I/O 作業完成。 該執行緒可能已在 API 中被封鎖,或被「並行視覺化檢視」視為 I/O 的 I/O 相關核心等待封鎖。 CreateFile()
、ReadFile()
及 WSARecv()
之類的 API 即屬於這個群組。
記憶體管理時間
時間軸中的這些區段會和分類為記憶體管理的封鎖時間相關聯。 這個案例表示,和記憶體管理作業 (例如分頁) 建立關聯的事件會封鎖執行緒。 在這段期間內,會在並行視覺化檢視當作記憶體管理分類計數的 API 或核心狀態中封鎖執行緒。 像是分頁和記憶體配置等事件都包括在內。
請檢查相關聯的呼叫堆疊並分析報表,以深入了解分類為記憶體管理的根本封鎖原因。
先佔時間
時間軸中的這些區段,會和分類為先佔時間的封鎖時間相關聯。 此分類表示執行緒因為下列原因之一而被切換︰
排程器已使用較高優先順序的執行緒取代它。
執行緒的執行配量已到期,而其他執行緒已準備好執行。
在這段期間內,執行緒因為並行視覺化檢視被視作先佔的核心等候原因而被封鎖。 先佔區段會在執行緒被推出邏輯核心時開始,並會在該執行緒繼續執行時結束。
先佔區段的工具提示會顯示造成先佔的處理序或執行緒名稱。 不過,這不表示接手的處理序或執行緒會在先佔期間全程執行。
睡眠時間
時間軸中的這些區段,會和分類為睡眠時間的封鎖時間相關聯。 睡眠分類表示執行緒自動放棄其邏輯核心,而且不執行任何工作。 在這段期間內,會在並行視覺化檢視當作睡眠分類計數的 API 中封鎖執行緒。 Sleep()
和 SwitchToThread()
等 API 即屬於這個群組。
同步處理時間
時間軸中的這些區段會與歸類為同步處理的封鎖時間建立關聯。 當執行緒在同步處理中標記為已封鎖時,就會隱含這些項目的其中一個:
執行此執行緒可能會造成呼叫眾所周知的執行緒同步處理 API,例如
EnterCriticalSection()
或WaitForSingleObject()
。API 比對演算法無法真正面面俱到,因此有些可以對應到其他分類的 API 也可能會顯示為同步處理,因為呼叫堆疊中的框架最後會到達封鎖對應至此類別基本的基礎核心。
若要了解執行緒封鎖事件的根本原因,請仔細檢查封鎖的呼叫堆疊和分析報表。
UI 處理時間
時間軸中的這些區段與歸類為 UI 處理的封鎖時間建立關聯。 這表示執行緒會提取 Windows 訊息或執行其他使用者介面 (UI) 工作。 在這段期間內,會在並行視覺化檢視當作 UI 處理計數的 API 中封鎖執行緒。 GetMessage()
和 MsgWaitForMultipleObjects()
等 API 即屬於這個群組。
如果識別不到任何預先定義的封鎖 API,請檢閱呼叫堆疊並分析報表來判斷延遲的基本原因。
[UI 處理] 分類有助於您了解 GUI 應用程式回應性,並且適用於與 UI 回應性相依的應用程式。 例如,如果應用程式中的 UI 執行緒達到 100% 的 UI 處理時間,則可能具回應性。 不過,如果 UI 執行緒將大量時間花在其他分類中,請尋找根本原因,並考慮用於減少執行緒上非 UI 分類的選項。