코딩하는 개굴이

[안드로이드] SingleThread 상태와 MultiThread 상태 본문

안드로이드

[안드로이드] SingleThread 상태와 MultiThread 상태

개굴이모자 2022. 9. 5. 23:54
반응형

시작하기 전에

# Thread란? Thread가 무엇인지 알아보기 위해서는 Program, Process, Thread 사이의 관계를 아는 것이 이해에 도움이 될 것이다.

- Program : 컴퓨터에서 어떤 작업을 위해 실행할 수 있는 "정적인 상태의 파일" 로 명령어들의 집합이다.
- Process : 운영체제로부터 자원을 할당받은 "작업의 단위"로, Program의 동적인 상태라고 할 수 있다.
- Thread : 프로세스가 할당 받은 자원을 이용하기 위한 "실행 흐름의 단위" 이다.

 

Android에서의 Thread

Android에서 Thread는 기본적으로 Main Thread 하나만 존재한다. 해당 상태를 "Single Thread" 라고 부른다.

그러나, 하나의 Main Thread에서는 DB나 REST 등 오래 걸리는 작업들이 발생 할 경우 UI 가 느려지거나 의도한 대로 동작하지 않을 가능성이 존재한다.

 

JVM에서는 하나의 프로세스에서 여러 Thread를 가질 수 있도록 허용하고 있다. 따라서, 주로 Main Thread 이외의 Thread 들을 추가하여 작업한다.

 

이때, Main Thread 이외의 추가된 Thread들을 "Worker Thread" 라고 부른다. 그리고, 이처럼 Thread 가 2개 이상 존재하는 상태를 "Multi Thread" 라고 부른다.

 

# Android에서
모든 UI 작업이
Main Thread 에서
수행되도록
강제하는 이유는?
만일 UI 작업이 개별 스레드에서 구현될 경우, Thread의 동기화 문제로 오작동할 가능성이 존재한다.
예시로 아래와 같은 작업들이 필요하고 전부 개별 Thread에서 진행이 되어야만 하는 상태라고 가정해보자.

[작업]
1. Button의 배경을 RED로 바꾼다.
2. Button의 배경이 RED이면 글자색을 WHITE로 바꾼다.
3. 글자색이 WHITE이면 폰트스타일을 BOLD로 바꾼다.

위 작업에 대해서 1->2->3 이 순차적으로 진행되길 기대했지만 어떤 연유로 인해 2->1->3 으로 순서가 바뀌게 되었다면(개별 스레드이기 때문에 순서가 보장되지 않는다) 의도된 대로 동작하지 않게 될 것이다.

따라서, 안드로이드는 이러한 동기화 문제로 오작동이 발생하는 불상사를 막기위해 UI를 전부 Main Thread에서 작업되도록 강제화한다.

 

 

Android 의 Main Thread 시작점

Android는 Kotlin으로 작업되었다고 하더라도 결국은 Java 로 실행되고, JVM은 프로그램의 시작점인 main() 함수를 찾아 시작하게 된다.

<activity android:name="com.gaegul.rainyday.presentation.MainActivity" android:exported="true">
     <intent-filter>
          <action android:name="android.intent.action.MAIN" />
          <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>
</activity>

Android에서는 위처럼 manifest의 "LAUNCHER" 카테고리의 intent filter를 가진 액티비티를 앱의 시작점으로 두고 MainThread가 만들어진다.

 

 

참고 링크

  • https://dkswnkk.tistory.com/354?category=513905
  • https://dkswnkk.tistory.com/379
  • https://velog.io/@gparkkii/ProgramProcessThread
반응형
Comments