프로세스가 단일 스레드로 동작하는 방식으로 일련의 처리를 단일 스레드만으로 직렬 처리하는 프로그래밍 방법이다. 하나의 레지스터, 스택으로 표현한다.자바스크립트가 가장 대표적인 싱글 스레드 언어다.
싱글 스레드의 장점
자원 접근에 대한 동기화를 신경쓰지 않아도 된다. 여러 개의 스레드가 프로세스의 자원을 공유할 경우,각 스레드가 원하는 결과를 얻게 하려면 공용 자원에 대한 접근을 제어해야 한다. 쉽게 말해서, 모든 스레드가 일정 자원에 동시에 접근하거나, 똑같은 작업을 실행하려는 경우,에러가 발생하거나 원하는 값이 나오지 않는다. 그래서, 스레드들이 동시에 같은 자원에 접근하지 못하도록 제어해줘야만 한다.
자원 접근에 대한 동기화를 신경쓰지 않아도 되므로 문맥 교환(context switch) 작업 또한 요구하지 않는다. 문맥 교환은 여러 개의 프로세스가 하나의 프로세서를 공유할 때 발생하는 작업으로 많은 비용을 필요로 한다.
프로그래밍 난이도가 쉽고, CPU 메모리를 적게 사용한다.
싱글 스레드의 단점
여러 개의 CPU를 활용하지 못한다. 싱글 스레드는 하나의 물리적 코어밖에 사용하지 못해 멀티 코어 머신에서 CPU 사용을 최적화할 수 없다. 최적화를 위해선 Cluster 모듈을 이용하여 여러 프로세스를 사용할 수 있다. 하지만 앞서 프로세스끼리의 자원 공유는 어렵기 때문에 Redis와 같은 부가 인프라가 필요하다.
연산량이 많은 작업을 하는 경우, 그 작업이 완료되어야 다른 작업을 수행할 수 있다.
싱글 스레드 모델은 에러 처리를 못하는 경우 멈춰버리게 된다. 멀티 스레드 모델은 에러 발생 시 새로운 스레드를 생성하여 극복할 수 있다.
예제) Node.js는 싱글 스레드로만 작동한다.(X)
node.js의 Event loop는 싱글 스레드로 작동되지만, Worker pool은 멀티 스레드로 작동된다.
즉, node.js의 초기화와 callback은 Event loop라는 하나의 프로세스, 하나의 스레드에서 작동되지만 I/O intensive, CPU intensive한 모듈은 Worker pool에서 작동