쓰레드

 

- Task 단위 : Thread

- OS 커널에 의한 *Context Swithcing을 통해 동시성을 보장한다.

- Blocking : 작업 1(Thread) 이 작업 2(Thread) 의 결과가 나오기까지 기다려야한다면
작업 1 Thread 는 Blocking 되어 그 시간동안 해당 자원을 사용하지 못한다.

 

코루틴

 

- Task 단위 : Object

- 프로그래머의 코딩을 통해 Context Swithcing 시점을 마음대로 정함으로써 동시성을 보장한다.

- Non-Blocking : 작업 1(Object) 이 작업 2(Object) 의 결과가 나오기까지 기다려야한다면
작업 1 Object 는 Suspend 되지만 작업 1 을 수행하던 Thread 는 그대로 유효하기 때문에 작업 2 도 작업 1 과 동일한 Thread 에서 실행될 수 있다.

 

즉, 코루틴은 작업 1과 작업 2의 전환에 있어 단일 Thread A 위에서 Coroutine Object 객체들만 교체함으로써 이뤄지기 때문에 OS 레벨의 Context Switching 은 필요없다.

 

Coroutine 은 Thread 의 대안이 아니라 기존의 Thread 를 더 잘게 쪼개어 사용하기위한 개념이다.

 

*Context Swithcing :현재 진행하고 있는 Task의 상태를 저장하고,

다음 진행할 Task의 상태 값을 읽어 적용하는 과정을 말한다.

 

참고

https://nesoy.github.io/articles/2018-11/Context-Switching

https://aaronryu.github.io/2019/05/27/coroutine-and-thread/

+ Recent posts