Android 中的執行緒排程

2021-07-12 06:46:39 字數 979 閱讀 8036

執行緒排程聽起來很學術,是作業系統中的概念:執行緒排程決定系統中不同執行緒執行,執行時間,何時執行。android 中的執行緒排程很作業系統中的執行緒排程類似,主要使用 nice 和 cgroups 這兩個變數來排程執行緒(本質上來說還是通過設定執行緒優先順序,讓 linux 核心有依據的分配執行緒執行)。

nice這種特性可以讓後台工作執行緒盡量少搶占前台執行緒的時間片(從os來說),從而保證了使用者介面的流暢性。實際上,仍有一種可能使 ui 卡死,例如有30個後台執行緒,但是只有1個 ui 程序,這30個後台執行緒可能佔據了很大的計算資源,導致 ui 執行緒得不到及時執行,導致卡頓、掉幀;為了防止這種情況發生, android 提出了 cgroups ,用來解決類似的問題。

為了解決上述問題,android 將前台執行緒和後台執行緒分開執行,即利用linux的cgroups 給前台執行緒建乙個群,給後台執行緒建乙個群,然後排程器在這兩個群中跑,這樣不管後台執行緒有多少,排程器總能照顧到前台執行緒的執行;所以使用者體驗得到了保證。

如何區分前台程序和後台程序的 cgroup?

android 會自動將沒有在前台程序 cgroup 執行的執行緒都放到後台程序的 cgroup 中,這就保證了不管開多少執行緒,只會將其分為兩個 group,前台 cgroup 和後台 cgroup;理論上,不管多少非前台執行緒執行,android都能保證前台執行緒的執行。

需要銘記於心的是,在 ui 主線程例項化的執行緒或執行緒池,都會繼承 default 或foreground 屬性(因為 ui 執行緒就是這個屬性,子執行緒會繼承父執行緒的屬性),所以如果大量類似工作執行緒存在於前台程序的 cgroup 中話,可能會使 ui 變得非常不流暢。若是工作執行緒,建議在執行前通過process.setthreadpriority(process.thread_priority_background) 直接設定執行緒的屬性。

1

newthread

(new

runnable()8

}).start

();

Android 中的執行緒是如何排程

執行緒排程聽起來很學術,是作業系統中的概念 執行緒排程決定系統中不同執行緒執行,執行時間,何時執行。android 中的執行緒排程很作業系統中的執行緒排程類似,主要使用 nice 和 cgroups 這兩個變數來排程執行緒 本質上來說還是通過設定執行緒優先順序,讓 linux 核心有依據的分配執行緒...

Android執行緒排程機制

2014 2 24 閱讀789 在android weekly上看到了一篇關於android執行緒排程的文章,感覺挺不錯的,試著將其翻譯了一下,這篇文章是關於android中線程是如何排程的,以及怎麼樣顯示設定執行緒優先順序保證應用程式在 多個執行緒在後台執行時保持響應。執行緒排程是指作業系統負責決...

OpenMP 中的執行緒任務排程

openmp中任務排程主要針對並行的for迴圈,當迴圈中每次迭代的計算量不相等時,如果簡單地給各個執行緒分配相同次數的迭代,則可能會造成各個執行緒計算負載的不平衡,影響程式的整體效能。如下面的 中,如果每個執行緒執行的任務數量平均分配,有的執行緒會結束早,有的執行緒結束晚 1 include2 in...