안드로이드/이론관련

스레드(Thread)와 코루틴(Coroutine)의 차이

닉네임못짓는사람 2023. 2. 27. 20:06
반응형

이 글에서는 스레드와 코루틴의 차이점 대해 간단하게 알아보도록 하자.

 

먼저, 둘의 차이점을 말하기 전에 둘의 공통점은 프로그램을 만드는 과정에서 '비동기' 작업을 하기 위해서 사용한다는 점이다.

비동기 작업은 어떤 작업을 수행할 때, 이가 끝나는 것을 기다리지 않고 다른 작업을 수행하는 것이고

반대로 동기 작업은 해당 작업이 끝날 때까지 기다린 뒤 다음 작업을 수행하는 것이다.

 

그런데, 스레드와 코루틴은 근본적으로 큰 차이가 있다.

스레드의 경우 여러 개의 스레드를 사용해서 여러 개의 작업을 '병렬'로 수행하여 비동기적으로 작동한다.

하지만 코루틴의 경우 비동기 작업에 사용되긴 하지만 실제로는 병렬적으로 수행되는 것이 아니고

여러 개의 작업을 잘게 쪼개서 나눠서 작업을 수행하는 방식이다.

 

그림으로 표현하면 아래처럼 될 것이다.

스레드를 설명할 때 일꾼, 생산라인 등에 비유하는 경우가 있는데

위의 경우 스레드는 두 개의 작업을 두 일꾼이 동시에 처리하는 '병렬' 작업이 될 것이고

코루틴은 한 명의 일꾼이 두 작업을 잘게 쪼개서 번갈아 가면서 수행함으로써 동시에 처리되는 것처럼 보이게 하는 것이다.

 

코루틴은 실제로 병렬 처리를 하는 것은 아니지만 스레드보다 가볍기 때문에 성능 면에서는 더 좋다고 한다.

필자는 실제로 안드로이드 환경(Kotlin)에서 사용해 본 결과 코루틴이 스레드보다 코드가 간결하여 사용하기 편했던 경험이 있다.

반응형