싱글코어 멀티스레드에서 명령어의 실행을 동시에 실행되는 것 처럼 보이게 하기 위한 프로그래밍 기법입니다. 이를 위해 더 높은 우선순위를 가진 프로세스로 스레드를 번갈아 가면서 작업이 진행되는데 이를 Context Switching 이라고 합니다.
멀티코어 멀티스레드에서 독립적인 명령어의 실행을 동일한 시간에 진행할 수 있도록 하는 프로그래밍 기법입니다.
동시성은 두 개 이상의 알고리즘이 실행 시간이 겹쳐질 때 발생하며 중첩이 발생하기 위해서는 두 개 이상의 실행 스레드가 필요합니다. 이런 프로세스가 단일코어에서 동작된다면 이는 병렬이 아닌 동시에 실행되며, 다른 스레드의 instructions를 교차 배치하여 스레드를 효율적으로 진행시킵니다.
병렬성은 두 개의 알고리즘이 정확히 같은 시점에 실행될 때 발생합니다. 이것이 가능하려면 두 개 이상의 코어와 스레드가 존재해야하며 각 코어가 동시에 스레드의 instructions를 실행할 수 있어야 합니다.
이렇듯 병렬은 동시성을 의미하지만 동시성은 병렬성 없이도 발생할 수 있습니다.
🌟 코루틴(Coroutine)이란?
각 작업(job)을 루틴이라 하고, 이 루틴들이 서로 협력하여 멀티태스킹을 수행하는 행위가 이루어집니다.
코루틴은 작업을 효율적으로 분배해서 동시성을 보장하는 것을 목표로 하지만 기존 동시성 프로그래밍과 다른점이 있습니다.
코루틴은 작업마다 Continuation에 각 작업의 상태를 저장하고 이를 활용하여 중지된 작업을 재개하는 방식입니다. 따라서 스레드처럼 고정된 스택 메모리를 필요로 하지 않으며, 스레드에 비해 생성 및 Context Switching 비용이 적으며, 이를 통해 스레드보다 코루틴이 더욱 경량으로 동작할 수 있습니다.
그렇기에 싱글 코어에서도 효율적으로 동시성 프로그래밍을 제공하며, 이는 안드로이드 앱 성능을 폭발적으로 향상시킬 수 있는 결과를 가져왔습니다.
다음에는 코루틴에 대해 더욱 자세한 정보를 다뤄보겠습니다. 감사합니다.