공부/개념 & 유용한 내용
코루틴 & 쓰레드 차이점
ENUM01
2020. 7. 2. 09:42
쓰레드

- 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의 상태 값을 읽어 적용하는 과정을 말한다.
참고