우리는 안드로이드에서 UI 작업을 많이 하게 된다. (영역으로 본다면 프론트엔드니깐?)
UI는 사용자와 상호 작용을 하여, 유저가 액션을 취하였을 때 내부 로직을 통하여 결과값을 보여주는 역할을 하고 있다.
만약 사용자가 [버튼]을 눌렀을 때 10초 이상이 걸리는 작업을 한다면 어떻게 될까?
안드로이드에서는 UI를 위한 MainThread가 존재하고 위 작업을 MainThread에서 한다면 사용자는 10초 이상 멈춰있는 화면을 보고 있어야한다.
왜? MainThread에서는 UI에 관련된 작업을 처리하기 때문에
Thread는 Process 위에서 작동이 되고, 각 쓰레드는 독립된 메모리 영역인 스텍(Stack)을 가지고 있기 때문에 Thread 하나에서는 단일 작업 밖에 처리하지 못한다.각 Thread는 다른 Thread의 메모리 영역을 공유할 수 없다. 하지만 Process는 Heap에 속한 모든 Thread를 공유 할 수 있다.

이를 해결하기 위해서 개발자인 우리는 MainThread와 다른 영역의 메모리에서 생성된 Thread를 만들고 이 Thread에서 작업을 진행 해야한다.
Thread를 사용할 때 우리는 동시성 vs 병렬성을 생각하게 되는데
동시성 : 싱글 코어에서 쓰레드를 나누는 기술
병렬성 : 멀티 코어에서 동시에 실행되는 기술
동시에 여러 작업을 수행하는 것으로 말할 수 있다.
아래 이미지에서 설명한 것 과 같이 Task1과 Task2를 조금씩 나누어 동시에 실행되는 것 처럼 보이도록 한 것이지 사실 한번에 두개의 Task가 작동되는 것은 아니다.
사용자의 입장에서 본다면 Task1과 Task2의 작업을 잘게 나누어 작업을 동시에 일어나는 것처럼 느껴지게 된다.
Task1 = 10분 / Task2 = 10분의 처리 시간을 가진다면 결과적으로 10분 + 10분 = 20분의 처리 시간을 가진다.
