如何可視化常規調用堆棧並計算內部和外部執行時間非常明顯。但是,如果有人處理過協程,調用堆棧看起來可能非常混亂。我的意思是說,協程可能不會執行到它的父節點,而是執行到另一個協程(例如greenlet)。是否有一些常見的方法可以爲這種情況制定一致的分析輸出結果?有沒有一些常用的技術來分析基於協程的代碼?
0
A
回答
1
想想同一時間所有線程的堆棧的單個樣本。
你需要知道的是 - 誰在等誰,爲什麼。 通常情況下,如果函數A在棧上高於B,則意味着A正在等待B返回,原因是A希望B做某事。 如果您查看整個堆棧,對於一個線程,您會看到該線程爲什麼要花費特定納秒的一系列原因。 如果你正在尋找速度,你正在尋找一系列原因,總而言之,你並不需要(因爲有一個薄弱環節)。 即使鏈條在I/O中結束,也可以使用。 如果是用戶輸入,它只是等待用戶。 但是,如果它是輸出或磁盤I/O或普通的舊CPU啓動,您可能可以採取一些措施來減少它,並獲得性能提升(如果您在兩個或更多的示例中看到同樣的問題)。
如果線程A正在等待線程B呢? 然後你在A棧的底部看到的是一個等待另一個線程的函數。 你需要弄清楚哪個是線程B,並且看它的堆棧,因爲更長的它需要更長的A。 所以這很難,但是你肯定不會害怕這個。
我在這裏談論的是手動分析,您可以在調試器中自己抽取樣本,並充分注意每個樣本。 分析工具傾向於認爲你很懶,只想要數字,如果沒有任何東西跳出這些數字,你會很高興,因爲你什麼也沒有發現。事實上,如果一些愚蠢的不必要的活動花費了30%的時間,那麼平均來說,你需要看兩次的樣本數量是2/0.3 = 6.67個樣本(不是一個大數字),並且很可能是你會看到它和the profiler will not。 這就是random pausing。
相關問題
- 1. 您可以使用哪些技術來分析您的代碼
- 2. 有沒有其他技術可以用來取代rss feed syndication技術?
- 3. 爲什麼碼頭(基於容器的技術)是有用的
- 4. 有沒有一種方法或技術來實現基於用戶的數據庫資源分配?
- 5. 用戶生成數據的定性分析有哪些信息分析技術?
- 6. 用於遠程調用的PHP代碼保護技術,基於方案
- 7. 有趣的編程技術,從古代
- 8. Google分析跟蹤代碼使用的技術是什麼?
- 9. 壓縮技術有哪些?
- 10. 有沒有一種技術來區分泛型類的類行爲?
- 11. C#的技術分析Math.Round
- 12. 還有哪些基於網絡的技術可以執行程序?
- 13. 您使用哪些技術來最大化代碼重用?
- 14. 哪種協議/技術用於有狀態連接?
- 15. 更大的項目有哪些技術?
- 16. Quake Live背後的技術有哪些?
- 17. CIL中沒有運行代碼的正確技術術語是什麼?
- 18. 有沒有一個工具來分析哪個JavaScript文件添加了某些部分的HTML /代碼?
- 19. 斯卡拉技術來組織代碼
- 20. 技術來破壞代碼流?
- 21. 豐富的UI桌面應用程序有哪些技術?
- 22. 有關管理/超級用戶代碼被暴露的技術
- 23. 「預測分析中的建模技術」中的基本繪圖
- 24. 基於技術的網站主題有什麼好處?
- 25. 我可以使用哪些技術來調試我的Clojure代碼?
- 26. 什麼技術用於協作Web應用程序聯網
- 27. 是否有可用於集成SQL代碼和Subversion版本的工具/技術?
- 28. 在java中用於技術分析的開源庫
- 29. 用於在Safari桌面和iOS中分析內存的技術?
- 30. 用於灰度圖像圖像分析的技術