이번 글에서는 비동기 처리할 때 많이 사용하는 Coroutine에 대해서 알아보도록 하겠습니다.
Coroutine?
실행의 지연과 재개를 허용함으로써 비선점적 멀티태스킹을 위한 서브 루틴을 일반화한 컴퓨터 프로그램 구성요소입니다.
Co(협동) + routine(루틴)의 합성어입니다.
비선점적 멀티태스킹 이란?
- 비선점형 : 하나의 프로세스가 CPU를 할당받으면 종료되기 전까지 다른 프로세스가 CPU를 강제로 차지할 수 없습니다.
- 선점형 : 하나의 프로세스가 다른 프로세스 대신에 프로세서(CPU)를 강제로 차지할 수 있습니다.
즉 비선점적 멀티태스킹은 하나의 프로세스가 CPU를 차지할 수 없다는 것을 의미합니다.
Coroutine과 쓰레드의 차이점
Thread
- Thread는 각 작업에 해당하는 메모리 영역인 Stack을 할당합니다.
- 선점형 멀티태스킹 방식을 따릅니다. = 우선순위가 더 높은 작업이 CPU를 차지합니다.
- 병렬성 제공 = 물리적으로 동시에 작업을 수행한다는 것을 의미합니다
위 사진을 확인하면 Thread A에서 네트워크 작업을 하기 위해 Thread B에게요청을 보냈습니다. 그 후 Thread A 는 B 에게 응답이 오기 전까지 블락한 것을 볼 수 있습니다. 이 과정에서 Context Switching 이 일어나게 됩니다. 많은 요청이 있을 땐 Thread를 사용하면 Context Swtching이 많이 일어나면서 오버헤드를 발생시킵니다.
Coroutine
- Coroutine 은 Thread와 달리 Stack 영역이 아닌 Heap 영역에 적재됩니다.
- 비선점형 멀티태스킹 방식을 따릅니다. = 작업 순위가 높더라도 CPU를 차지할 수 없습니다.
- 병렬성은 제공하지 않지만 병행성을 제공합니다. = 물리적으로 작업을 실행하지는 않지만 논리적으로 동시에 작업이 실행되는 것을 의미합니다.
위 사진을 보면 하나의 쓰레드에서 여러개의 코루틴이 동작하는것을 확인 할 수 있습니다.
장점
- 하나의 쓰레드에서 동작하기 때문에 메모리 사용량이 적습니다.
- 다른 작업과 함께 동작할 수 있다.
단점
- 코루틴은 일반적으로 병렬성을 제공하는 쓰레드보다 느립니다.
- 동시에 실행되는 코드 블록의 수를 제한합니다.
이번 글에서는 이론적인 것에 대해 알아보았는데 다음 글에서는 예제를 확인하면서 코루틴에 대해 다뤄보려고 합니다.
긴 글 읽어 주셔서 감사합니다.
댓글