동시성, 병렬성 프로그래밍이란? (With Coroutine (Kotlin))

kez·2023년 8월 4일
1

Kotlin

목록 보기
3/6
post-thumbnail

코틀린에서 동시성, 병렬성 프로그래밍

동시성(Cocurrently) 프로그래밍이란?

싱글코어 멀티스레드에서 명령어의 실행을 동시에 실행되는 것 처럼 보이게 하기 위한 프로그래밍 기법입니다. 이를 위해 더 높은 우선순위를 가진 프로세스로 스레드를 번갈아 가면서 작업이 진행되는데 이를 Context Switching 이라고 합니다.

병렬성(Parallelism) 프로그래밍

멀티코어 멀티스레드에서 독립적인 명령어의 실행을 동일한 시간에 진행할 수 있도록 하는 프로그래밍 기법입니다.

동시성과 병렬성의 개념 차이

동시성은 두 개 이상의 알고리즘이 실행 시간이 겹쳐질 때 발생하며 중첩이 발생하기 위해서는 두 개 이상의 실행 스레드가 필요합니다. 이런 프로세스가 단일코어에서 동작된다면 이는 병렬이 아닌 동시에 실행되며, 다른 스레드의 instructions를 교차 배치하여 스레드를 효율적으로 진행시킵니다.

병렬성은 두 개의 알고리즘이 정확히 같은 시점에 실행될 때 발생합니다. 이것이 가능하려면 두 개 이상의 코어와 스레드가 존재해야하며 각 코어가 동시에 스레드의 instructions를 실행할 수 있어야 합니다.

이렇듯 병렬은 동시성을 의미하지만 동시성은 병렬성 없이도 발생할 수 있습니다.

Android Kotlin에서 Coroutine은 효율적으로 동시성을 보장합니다.

🌟 코루틴(Coroutine)이란?
각 작업(job)을 루틴이라 하고, 이 루틴들이 서로 협력하여 멀티태스킹을 수행하는 행위가 이루어집니다.

코루틴은 작업을 효율적으로 분배해서 동시성을 보장하는 것을 목표로 하지만 기존 동시성 프로그래밍과 다른점이 있습니다.

  • 작업 마다 'Object' 를 할당해주고, 이 Object 를 자유롭게 Switching 하기에(비교적 낮은 리소스) 동시성을 보장합니다.
  • Thread를 할당하는 것이 아닌 Object를 할당하기에 Context Switching 시 사용되는 리소스를 줄일 수 있습니다. 그렇기에 경량 스레드(Lightweight Thread) 라고도 부릅니다.

이 부분 조금 더 추가 설명하여 수정합니다. (2024/10/17)

코루틴은 작업마다 Continuation에 각 작업의 상태를 저장하고 이를 활용하여 중지된 작업을 재개하는 방식입니다. 따라서 스레드처럼 고정된 스택 메모리를 필요로 하지 않으며, 스레드에 비해 생성 및 Context Switching 비용이 적으며, 이를 통해 스레드보다 코루틴이 더욱 경량으로 동작할 수 있습니다.

그렇기에 싱글 코어에서도 효율적으로 동시성 프로그래밍을 제공하며, 이는 안드로이드 앱 성능을 폭발적으로 향상시킬 수 있는 결과를 가져왔습니다.

다음에는 코루틴에 대해 더욱 자세한 정보를 다뤄보겠습니다. 감사합니다.

profile
Android Developer

0개의 댓글