2강 스레드와 코루틴
프로세스와 스레드
- 프로세스
- 스레드
- 프로세스 보다 작은 개념
- 프로세스에 소속되어 여러 코드를 동시에 실행할 수 있게 해준다.
- 멀티 스레드
스레드와 코루틴의 차이
- 코루틴은 스레드 보다 작은 개념이다
- 프로세스와 스레드
- 프로세스가 있어야만 스레드가 있을 수 있다.
- 스레드가 프로세스를 바꿀 순 없다.
- 코루틴과 스레드
- 스레드가 있어야만 코루틴 코드가 있을 수 있다.
- 하지만 코루틴은 중단되었다가 재개될 때 다른 스레드에 배정될 수 있다.
프로세스, 스레드, 코루틴 context switching 특징
- 프로세스
- 각 프로세스는 독립된 메모리 영역을 가지고 있다.
- 때문에 context switching 시 힙과 스택을 모두 교체해야 한다.
- 모든 메모리가 교체되므로 비용이 많이 발생한다.
- 스레드
- 각 스레드는 독립된 스택 영역을 가지지만 힙 영역을 공유한다.
- context switching 시 스택만 교체한다.
- 프로세스 보다는 비용이 적다.
- 코루틴
- 코루틴1과 코루틴2는 같은 스레드에서 실행될 수 있다.
- 즉 동일한 스레드에서 각 코루틴들이 실행되면 메모리를 전부 공유하므로 context switching 비용이 스레드보다 적다.
코루틴과 동시성
- 동시성 - 두 작업이 아주 빠르게 전환되며 실행되어 동시에 실행되는 것처럼 보이는 것
- 병렬성 - CPU core가 여러 개 있어서 실제로 여러 일을 동시에 하는 것
- 코루틴은 1번 코루틴과 2번 코루틴이 같은 스레드에서 실행될 수 있기에 하나의 스레드만으로 동시성을 확보할 수 있다.
코루틴 yeild()
- 코루틴은
yeild()
함수로 스스로 다른 코루틴에게 자리를 양보할 수 있다.
- 반면 스레드는 OS 스케줄러가 스레드를 멈추고 다른 스레드가 실행되게 한다.
- 코루틴 방식을 ‘비선점형’, 스레드 방식을 ‘선점형’이라 부른다.