프로세스가 스레드보다 큰 개념이듯이, 스레드가 코루틴 보다 큰 개념이다.
구분 | 스레드 | 코루틴 |
---|---|---|
정의 | 프로세스보다 작은 개념이다. | 스레드보다 작은 개념이다. |
포함 관계 | 한 스레드는 오직 한 프로세스에만 포함되어 있다. | 한 코루틴의 코드는 여러 스레드에서 실행될 수 있다. |
컨텍스트 스위칭 | context switching 발생 시 stack 영역이 교체된다. | (한 스레드에서 실행하는 경우) context switching 발생 시 메모리 교체가 없다. |
실행 제어 | OS가 스레드를 강제로 멈추고 다른 스레드를 실행한다. | 코루틴 스스로가 다른 코루틴에게 양보한다. |
- 프로세스와 스레드: 프로세스는 운영 체제에서 실행 중인 독립된 프로그램이고, 스레드는 프로세스 내에서 실행되는 작업의 단위입니다. 한 프로세스는 여러 스레드를 가질 수 있습니다.
- 코루틴과 스레드의 비교: 코루틴은 스레드보다 경량화되어 있고, 컨텍스트 스위칭 비용이 더 적습니다. 이는 코루틴이 메모리를 적게 사용하고, 더 많은 동시성을 처리할 수 있음을 의미합니다.
- 코루틴의 비선점형 특성: 코루틴은 협력형 멀티태스킹(cooperative multitasking)으로, 실행 중에 명시적으로 다른 코루틴에게 제어권을 양보할 수 있습니다. 이는 코루틴이 언제 실행을 중단할지 결정할 수 있다는 것을 의미합니다.
- 코루틴의 선점형 특성: 앞서 설명한 코루틴의 비선점형 특성과 달리, 코루틴도 특정 상황에서 스레드처럼 선점형으로 동작할 수 있습니다. 이는 디스패처(dispatcher)를 통해 관리됩니다. 예를 들어, Dispatchers.Default를 사용하면 코루틴은 내부적으로 여러 스레드에서 실행될 수 있습니다.
- 코루틴의 디스패처: 코루틴은 디스패처를 통해 어떤 스레드에서 실행될지 결정합니다. 예를 들어, Dispatchers.Main은 메인 스레드에서 실행되도록 하고, Dispatchers.IO는 I/O 작업에 적합한 스레드에서 실행되도록 합니다.