스레드
어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위
일반적으로 한 프로그램은 하나의 스레드를 가짐
프로그램의 환경에 따라 둘 이상의 스레드를 동시에 실행 가능(멀티 스레드)
멀티 스레드
하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 의미하며 각 스레드는 자신이 속한 프로세스의 메모리를 공유
- 동시성(Concurrency)
싱글 코어에서 멀티스레드를 동작시키는 방식
여러 개의 스레드가 번갈아가면서 실행되는 성질
멀티 스레드로 동시성을 만족시킬 수 있지만 동시성과 멀티 스레드는 연관이 없다
번갈아 가면서 실행 되기 때문에 CPU의 의미없는 시간이 생김
코틀린은 싱글스레드에서 코루틴을 이용하여 동시성을 만족한다.
코루틴(Coroutine):
싱글 스레드에서도 루틴(routine) 이라는 단위(맥락상 함수와 동일)로
루틴간 협력이 가능하며, 동시성 프로그래밍을 지원하고 비동기 처리를
쉽게 도와주는 개념
- 병렬성(Parallelism)
멀티 코어에서 멀티 스레드를 동작시키는 방식으로, 한개 이상의 스레드를 포함하는 각 코어들이 동시에 실행되는 성질
병렬성은 각 코어들이 동시에 실행되므로 CPU의 의미없는 시간이 줄어 들어 성능이 좋아지지만 CPU 수보다 처리해야 할 프로세스나 스레드 수가 많다면 CPU를 사용하기 전까지 대기시간이 발생