[android] Thread Scheduling 에 대한 이야기 |
-
Thread 에는 priority 값을 주어 CPU 사용량을 조절할 수 있다. ( Process#setThreadPriority( int ), Thread#setPriority( int ) )
이 Priority 에 들어가는 값은 Nice value 라 부르는데, 다른 Thread 에 대해 얼마나 Nice 한가를 나타내는 값이다.
Nice 값이 높다는 것은 다른 Thread 에게 많이 양보하는 착한(?)놈이라는 의미.
즉 Nice 값이 높을수록 우선순위가 낮아 CPU 활용이 적어진다.
-
Android 에서는 Main ( UI ) Thread 가 우선순위가 보통 가장 높아야 한다.
BG 에서 도는 Thread 들의 Nice Value 가 낮아서 UI Action 을 방해할 정도가 되면 안 되기 때문에
linux 의 cgroups ( Control groups ) 이 Nice 값 하나만에 dependent 하여 android 가 돌지 않도록 조치를 취한다.
-
cgroup 은 foreground 와 background 두가지로 나뉘며,
foreground group 에 있는 녀석들은 Nice 관점에서 낮은 nice 를 무조건 갖게 된다.
background group 에 있는 녀석들은 CPU 가 busy 할 때 매우 적은 약 5%정도의 CPU 실행 시간만을 부여 받을 수 있다.
-
android 는 foreground 가 아닌 application 을 자동으로 background cgroup 으로 보내버린다.
그래서 현재 가장 위에 떠 있는 foreground 에 있는 녀석들이 가장 많은 CPU 를 사용할 수 있도록 배려하도록 되어있다.
-
참조 :
http://developer.android.com/reference/android/os/Process.html#setThreadPriority(int)
http://developer.android.com/reference/java/lang/Thread.html#setPriority(int)
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
Long 을 Int 로 casting 할 때 다음을 고려하자. (0) | 2015.12.28 |
---|---|
[android] 디컴파일링시 Plain Text 로 노출되면 안 되는 정보들 숨기기 (1) | 2015.12.24 |
[android] toLowerCase() 에 대한 고찰 ( 터키어, 이스라엘어, 리투아니아어 ) (0) | 2015.12.21 |
SQLite Bulk Insert 가장 빠른 방법은? (0) | 2015.12.18 |
[android] Serialization 을 사용할 때 다음의 예외를 고려하자. (0) | 2015.12.17 |
댓글