본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] Thread Scheduling 에 대한 이야기

by 돼지왕 왕돼지 2015. 12. 22.
반응형

 [android] Thread Scheduling 에 대한 이야기


5%, Android, application, background, BG, cgroups, control groups, CPU, cpu 사용량, Foreground, linux, Main, main thread, nice value, priority, process, Scheduling, setpriority, SetThreadPriority, thread, Thread Scheduling, UI, ui action, UI Thread, [android] Thread Scheduling 에 대한 이야기, 낮은 nice 의미, 높은 nice 의미, 안드로이드, 활용


-

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)






반응형

댓글