我一直有一個應用程序(它同時使用Java和C++和OpenCV),這似乎是執行各種任務所需的時間非常不一致的問題。爲了幫助診斷,我在java中創建了一個函數(叫做one_off_speed_test()
),它在一個循環中做了一系列整數運算問題,只花了大約半秒的時間,然後將時間打印到日誌中。如果我從onCreate()
內重複調用此函數,則每次呼叫所用的時間非常一致(+ = 3%),但如果我從onCameraFrame()
內調用此函數,即OpenCV在相機準備好圖像時調用的函數,那麼在每個框架中進行數學測試所花費的時間就會隨着兩倍而變化。我決定嘗試eclipse/DDMS中的執行採樣器,看看我是否可以計算出發生了什麼。我看到,當我點擊one_off_speed_test()
時,它列出了該功能的父母和子女,以及一行說「(上下文切換)」的行。然後在該行的標題爲「Incl Real Time」的欄下,它顯示「66%」。現在我在使用DDMS方面並不擅長,並且我對於上下文切換隻有一個朦朧的想法,但從目前的描述來看,它看起來像是我的上下文切換問題花了很多時間?還是我誤解了DDMS輸出。上下文切換使用了大量的時間嗎?
9
A
回答
2
上下文切換描述了花費執行其它線程的時間。所以,當你的函數從onCameraFrame()
被調用時,它與其他線程共享CPU,不一定是屬於你的應用程序的線程。
參見答案https://stackoverflow.com/a/10969757/192373,https://stackoverflow.com/a/17902682/192373
在投稿示例,onCameraFrame()
花在掛鐘,其中使用4.814454秒通過one_off_speed_test()
(據推測,對於10幀)14.413665秒,9.596984秒花在等待爲其他線程。這是有道理的,因爲onCameraFrame()
回調與攝像機服務競爭CPU資源,攝像機服務在單獨的系統進程中運行。
相關問題
- 1. 測量上下文切換的時間
- 2. 上下文切換測量時間
- 3. 變量上下文切換時間
- 4. 時間()和上下文切換
- 5. 什麼是上下文切換時間?
- 6. Linux獲取上下文切換時間
- 7. 線程量程時間中是否包含上下文切換時間?
- 8. 線程之間的上下文切換
- 9. WaitForSingleObject在超時時間爲零時會導致上下文切換嗎?
- 10. 我如何測量進程上下文切換所用時間的aproximation?
- 11. 跨上下文切換使用rdtsc + rdtscp
- 12. 使用SIGALRM切換線程上下文
- 13. 線程上下文切換vs進程上下文切換
- 14. 上下文切換在Linux中需要多長時間?
- 15. 是否可以減少上下文切換時間
- 16. 我們如何減少上下文切換時間
- 17. 上下文切換死鎖
- 18. 切換畫布上下文
- 19. Python:GIL上下文切換
- 20. 上下文切換太貴
- 21. PHP上下文切換
- 22. lpc 1769上下文切換
- 23. GPU上下文切換
- 24. pthread_mutex會調用內核切換上下文嗎?
- 25. 線程調用系統調用時的上下文切換
- 26. iOS上使用「performSelectorOnMainThread」的上下文切換
- 27. Axes3D情節採取了大量的時間和使用大量的RAM
- 28. 切換OpenGL上下文或切換上下文渲染目標,而最好?
- 29. 從進程上下文切換切換線程上下文有多好?
- 30. 上下文切換問題:管理上下文切換涉及哪部分OS?
謝謝您的信息和其他鏈接。但我仍然有點困惑。上下文切換的時間(66%)是在另一個線程中執行另一個任務所花費的時間,還是更多地是切換過程本身的開銷? – Mick
我的理解是,這是花在其他線程上的時間,而不是內核花在切換到其他線程上的時間。 –
_term_ [上下文切換](http://en.wikipedia.org/wiki/Context_switch)不是指在其他線程中花費的時間,而是「存儲和恢復進程的狀態(上下文)的進程或線程,以便稍後可以從同一點恢復執行。「至於執行採樣器是什麼_reporting_,我不確定。 –