쓰레드
- 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의 상태 값을 읽어 적용하는 과정을 말한다.
참고
'공부 > 개념 & 유용한 내용' 카테고리의 다른 글
배열(Array) & 리스트(List) 차이 (0) | 2020.07.07 |
---|---|
컴파일 언어 & 인터프리터 언어 (스크립트 언어) (0) | 2020.07.07 |
데드락 & 해결 방법 (0) | 2020.07.01 |
쓰레드와 프로세스의 차이점 (0) | 2020.07.01 |
스택 프레임 , 스택 오버 플로우 (0) | 2020.06.17 |