💻 개발/TIL

[TIL] 22.03.22

고도고도 2022. 3. 22. 20:20

공부한 것

코루틴
프로그래머스 1문제

알게된 것

1. 코루틴

코루틴비동기 처리 를 위해 코틀린 에서 지원하는 라이브러리 이다. 우선 동기비동기 에 대해서 알아보자. 동기는 응답을 요청했을 때 반환 값을 얻기 전까지 대기하는 것을 뜻하고, 비동기는 대기시간 별도의 Task를 수행하는 것을 뜻한다.

동시성 처리

작년 OS 수업을 들을 때 동시성 처리 에 대해서 배웠었다. 그런데 갑자기 동시성 처리를 왜 얘기하느냐, 동시성 처리가 비동기의 개념이 적용되어 있기 때문이다. 동시성 처리는 말 그대로 동시에 여러 개의 프로세스가 동시에 실행되는 것처럼 보이는 것이다. (Context Switching 이 발생한다.) 싱글 코어 에서 멀티 쓰레드 를 통해서 이를 구현하고 있다.

쓰레드

동시성 처리를 위해서 쓰레드 의 개념이 등장하는데 쓰레드는 프로세스 내에서 실행 흐름의 단위를 의미한다. 여러 개의 쓰레드에서 Context Switching 을 통해 번갈아가면서 작업을 수행한다.

쓰레드 VS 코루틴

쓰레드코루틴 모두 동시성 처리 를 위해 등장한 개념이다. 쓰레드의 경우 각 작업에 해당하는 독립적인 메모리 영역(Stack)을 할당받는데 쓰레드가 추가될 때마다 그 수만큼 Stack이 추가된다. 또한 어떤 쓰레드 작업을 먼저 수행할지와 어떤 쓰레드를 많이 수행할지에 대한 Preempting Scehduling 을 진행한다. 이와 다르게 코루틴은 각 작업에 대해 쓰레드를 할당받지 않고 이보다 더 작은 단위인 Object 를 할당받고 이들을 Programmer Switching 함으로서 Context Switching 에서 발생하는 비용을 줄이고 동시성 처리를 지원한다.

쓰레드의 Context Switching
코루틴의 Programmer Switching

위의 두 사진을 보면 차이에 대해서 뚜렷하게 알 수 있을 것이다. 쓰레드는 Context Switching 을 통해서 Block 된 쓰레드에서 다른 쓰레드로 전환이 진행되고 Task를 이어 나간다. 코루틴의 경우 하나의 쓰레드에서 Programmer Switching 을 통해서 Object 를 전환하여 Task를 이어 나간다. 하지만 마지막 세 번째 그림은 2개의 쓰레드에서 Task를 진행하고 있으므로 Context Switching 이 불가피하다. 코루틴을 사용할 때는 No Context Switching 를 장점을 활용하기 위해 단일 쓰레드에서 여러 코루틴 을 실행하는 것이 좋다.

1. 코루틴은 쓰레드의 대안이 아닌 기존 쓰레드를 더 잘게 쪼개어 사용하기 위한 개념이다.
2. 코루틴은 작업의 단위를 Thread에서 Object로 축소하면서 Context Switch 비용을 최소화했다.

참고 자료

Coroutine, Thread 와의 차이와 그 특징
코루틴 가이드

공부할 것

코루틴

느낀 점

😎

'💻 개발 > TIL' 카테고리의 다른 글

[TIL] 22.04.17  (0) 2022.04.17
[TIL] 22.03.23  (0) 2022.03.23
[TIL] 22.03.22  (0) 2022.03.22
[TIL] 22.03.20  (0) 2022.03.20
[TIL] 22.03.19  (0) 2022.03.19
[TIL] 22.03.17  (0) 2022.03.17