티스토리 뷰

Android/Android Multi Threading

3. 안드로이드 스레드

안드로이드용용 2016. 7. 25. 09:39

학습 목표.

UI, 바인더, 백그라운드 스레드의 유사점과 차이점

리눅스 스레드 결합(coupling)

스레드 스케줄링이 응용프로그램 프로세서의 순위에 영향을 받는 방식

리눅스 스레드 실행


3.1 안드로이드 응용프로그램 스레드

응용프로그램 관점에서 스레드는 UI, 바인더, 백그라운드 스레드 등 3가지 유형이 있음



3.1.1 UI Thread 

수명 : 응용 프로그램의 시작과 함께 실행되고, 응용프로그램의 프로세스와 같은 수명을 갖는다.

역할 : 안드로이드의 구성요소를 실행하고, 화면 UI요소를 변경하는데 사용하는 메인스레드 

 (다른 Thread에서 UI변경을 시도하려는 것을 발견하면 CalledFromWorngThreadException 발생)

동시성 문제? : UI요소는 UI스레드에서만 접근하기 때문에 UI요소에 대한 접근 동기화는 필요하지 않는다. (싱글 스레드 환경을 적용하므로 동시성 문제에 영향을 받지 않는다.)


3.1.2 바인더 스레드

수명 : 스레드 풀(thread pool)이라는 스레드 집합을 유지함 (결코 종료되거나 재생성되지 않지만, 프로세스 안에서 다른 스레드의 요청에 따라 태스크를 실행할 수 있음)

역할 : 서로 다른 프로세스에서 스레드 사이의 통신에 사용된다.

종류 : System Service, Intent, Content Provider, Service


3.1.3 백그라운드 스레드

응용프로그램에서 UI스레드에 의해 파생되어 명시적으로 생성하는 모든 스레드

(UI스레드의 속성-우선순위를 상속받는다)


3.2 리눅스 프로세스와 스레드

안드로이드 플렛폼은 리눅스 기반의 OS이기 때문에 리눅스 환경에 대한 지식은 응용프로그램 파악과 프로그램 성능 향상에도 도움을 준다.


실행중인 응용 프로그램은 미리 시작된 Zygote프로세스에 의해 파생된다.


- 사용자 ID (UID) : 리눅스에서 사용자를 나타내는 고유 ID

- 프로세스 ID (PID) : 프로세스 고유 식별자

- 부모 프로세스 ID (PPID) : 안드로이드에서 모든 프로세스의 부모는 Zygote

- 스택 : 지역 함수 포인터와 변수

- 힙 : 프로세스에 할당된 주소 공간 (다른 프로세스 접근 금지)


※ 프로세스와 스레드의 차이점

프로세스끼리는 서로 주소 공간을 공유하지 않지만, 스레드끼리는 프로세스 내에서 주소 공간을 공유한다.


3.2.1 스케줄링

안드로이드 응용 프로그램 내의 스레드 끼리의 경쟁 또는 모든 응용프로그램의 모든 스레드와의 경쟁하는데 있어서 스케줄링


스케줄링에 영향을 미치는 방법 : 우선순위, 컨트롤 그룹


우선순위 (niceness value)

-20 (가장 높은 우선순위) ~ 19 (가장 낮은 우선순위) 

default : 0


-java.lang.Thread

setPriority(int priority); 로 0부터(낮은 우선순위) 10까지(가장 높은 우선순위) 설정 가능

-android.os.Process

Process.setThreadPriority(int priority); // 스레드 호출

Process.setThreadPriority(int threadId, int priority); // 특정 id를 가진 스레드


컨트롤 그룹

안드로이드는 Foreground Group과 Background Group으로 나뉜다.

그룹끼리 프로세서의 실행 시간이 서로 다른 값으로 할당될 수 있도록 실행의 제약조건을 정의한다.


3.3 마치며

안드로이드의 모든 스레드 유형(UI, 바인더, 백그라운드)은 리눅스 포직스 스레드다.

UI스레드는 가장 중요한 스레드지만, 다른 스레드에 비교해서 특별할 스케줄링을 갖지 않는다.

백그라운드 스레드를 백그라운드 컨트롤 그룹에서 실행시키게 하여 UI스레드를 방해하지 못하게 하는 것이 프로그래밍에서 중요하다.


다음시간은 스레드간 통신 기법에 대해서 알아보자

'Android > Android Multi Threading' 카테고리의 다른 글

6. 메모리 관리  (0) 2016.07.29
5. 프로세스 간 통신  (0) 2016.07.28
4. 스레드 통신  (0) 2016.07.26
2. 자바의 멀티 스레딩  (0) 2016.07.20
안드로이드 멀티스레딩 정리 개요  (0) 2016.07.20
댓글
댓글쓰기 폼
공지사항
최근에 달린 댓글
Total
66,013
Today
0
Yesterday
10
TAG
more
«   2022/12   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함