안드로이드/Android 비동기 처리

비동기 처리(process&thread)

코딩하는후운 2022. 6. 7. 15:56
반응형

# concurrency

비동기적으로 작업을 처리하기 위해서는 동시에 작업을 처리해야한다.

이것을 Concurrent computing이라 하며 흔히 동시성이라 부른다.

 

동시성은 적어도 두 개의 스레드가 진행 중일 때 존재하는 조건이며, 가상 병렬 처리의 한 형태로 시간 분할(time-slicing)을 포함한다. 우리가 흔히 ‘동시’라고 이야기 하지만 컴퓨터(코어)는 한번에 하나의 명령어만 처리할 수 있다. 즉, 두개 이상의 알고리즘이 하나의 코어내에서 스레드간에 빠르게 교차되면서 실행되기 때문에 ‘동시’라고 느끼는 것이다.

순차적으로 작업을 처리하면 비효율적이다.

어떤 작업을 할때 기다려야하고 하드웨어 리소스를 낭비한다.

-> 동시에 실행하고자 하는 요구가 생겨났다.

 

 

# process & thread

동시에 실행할 작업을 어떤 단위로 나눌것인가?

 

OS에서는 멀티태스킹을 지원한다.

-> 멀티태스킹은 중앙 처리 장치와 같은 공용자원을 나누어 작업을 처리하는것을 말한다.

엄밀히 말해 사실은 한 개의 CPU를 가진 개인용 컴퓨터가 특정 순간에 수행할 수 있는

태스크의 개수는 하나뿐이다. 쪼개서 번갈아 실행하는 것일 뿐.

 

멀티태스킹을 처리할때 실행되는 작업의 단위는 무엇일까?

프로세스이다. 프로세스는 OS에서 여러개가 생성된다. OS에서 동시에 실행하는 단위는 프로세스

 

그렇다면 우리는 하나의 앱 즉 프로세스 내에서 동시성을 구현해야 한다.

프로세스 내에서 작업단위는 무엇일까? 스레드이다.

스레드는 프로세스 내에서 여러개가 생성될 수 있다.

 

# thread

동시성 프로그래밍이 중요하다.

작업을 적게하게 나누고, 실행 시점을 잘 챙겨야 좋은 프로세스 동작을 보장할 수 있다.

 

개발을 하다보면 비동기적으로 처리해야되는 작업들이 생긴다.

 

이를 해결할 수 있는 것이 스레드이다.

하지만 스레드는 위 그림에서 보는 것처럼 별도의 메모리 영역을 가진다.

또한 스레드간 작업 교환을 위해 여러가지 비용이 발생한다.

특히 다루기도 쉽지 않다.

 

그래서 우리는 핸들러나 루퍼, AsyncTasks, 전통적인 콜백구조를 사용했었다.

하지만 메인스레드와 워커스레드의 작업 시작지점과 중단 취소 등을 처리하는 것은 어렵고 가독성도 떨어진다.

 

반응형