프로세스가 할당받은 자원을 이용하는 실행의 단위로, CPU의 이용의 기본 단위
프로세스 내에서 프로그램 명령을 실행하는 기본 단위이자 흐름, 개체
하나의 프로세스 안에서 다양한 작업을 담당하는 최소 실행 단위
ex) 크롬 브라우저(=프로세스)에서
벨로그 작성(=스레드1) & 유튜브로 음악 듣기(=스레드2)

프로세스에 하나의 제어 모델이 있으면 단일 스레드,
프로세스가 다수의 제어 스레드를 가진다면 다중 스레드 모델이다.
하나의 프로세스에서 하나의 스레드 실행
하나의 레지스터와 스택으로 표현
1. 자원 접근에 대한 동기화를 신경 쓰지 않아도 된다.
멀티 스레드는 여러 스레드가 동일한 자원에 접근할 경우 동기화 처리가 필요하지만,
싱글 스레드는 이런 문제를 고려할 필요가 없다.
2. 문맥 교환(Context Switching) 비용이 적다.
여러 프로세스나 멀티 스레드 환경에서는 문맥 교환이 발생하며,
이 과정에서 많은 비용이 소모된다.
싱글 스레드는 스레드 전환(Thread Switching) 없이 하나의 작업을 순차적으로 처리하므로
불필요한 문맥 교환 비용이 발생하지 않는다.
3. 프로그래밍 난이도가 낮다.
동기화, 교착 상태(Deadlock) 등의 복잡한 문제를 고려할 필요가 없어 개발이 쉽다.
4. CPU 및 메모리 사용량이 적다.
멀티 스레드는 여러 작업을 동시에 수행할 수 있지만, 그만큼 자원을 많이 소비한다.
반면, 싱글 스레드는 최소한의 자원만 사용하여 안정적으로 실행된다.
1. 여러 개의 CPU를 활용하지 못함
싱글 스레드는 하나의 물리적 코어만 사용하므로, 멀티 코어 시스템에서 CPU 사용을 최적화할 수 없다.
최적화를 위해서는 Cluster 모듈을 사용하여 여러 프로세스를 실행해야 하지만, 프로세스 간 자원 공유가 어렵기 때문에 Redis 등의 부가적인 인프라가 필요하다.
2. 연산량이 많은 작업에서 성능 저하
싱글 스레드는 한 번에 하나의 작업만 수행할 수 있기 때문에, 작업이 완료되기 전까지 다른 작업을 수행할 수 없다.
CPU를 많이 사용하는 연산이 진행될 경우, 전체 프로그램의 응답 속도가 느려질 수 있다.
3. 에러 발생 시 프로그램 전체가 멈출 위험
싱글 스레드 환경에서는 하나의 스레드가 모든 작업을 처리하기 때문에 에러 처리가 제대로 되지 않으면 프로그램이 멈출 수 있다.
반면, 멀티 스레드는 하나의 스레드에서 오류가 발생해도 다른 스레드가 작업을 이어갈 수 있어 상대적으로 안정적이다.
프로그램을 다수의 실행 단위로 나누어 실행
프로세스 내에서 자원을 공유하여 자원생성과 관리의 중복을 최소화
서버가 많은 요청을 효율적으로 수행할 수 있는 환경을 제공
각각의 스레드가 고유의 레지스터와 스택으로 표현됨
1. 새로운 프로세스를 생성하는 것보다 스레드를 생성하는 것이 빠르다.
프로세스를 새로 생성하면 운영체제가 추가적인 메모리 공간을 할당하고 실행 환경을 설정해야 하지만, 스레드는 기존 프로세스 내에서 생성되므로 더 빠르게 실행될 수 있다.
2. 프로세스의 자원과 상태를 공유하여 효율적인 운영이 가능하다.
멀티 스레드는 하나의 프로세스 내에서 여러 개의 스레드가 실행되며, Heap 영역과 같은 공유 메모리를 활용할 수 있다.
이를 통해 프로세스 간 통신(IPC, Inter-Process Communication) 없이도 데이터 공유가 가능하며, 자원을 효율적으로 활용할 수 있어 시스템 자원 소모가 줄어든다.
3. 스레드의 문맥 교환(Context Switching)이 더 빠르다.
프로세스 간 문맥 교환에는 전체 주소 공간 변경 등의 오버헤드가 발생하지만, 스레드는 같은 프로세스 내에서 실행되므로 문맥 교환이 가볍다.
따라서 멀티 스레드는 응답 시간이 더 빠르고, 성능이 향상된다.
웹 서버에서 클라이언트 요청을 처리하는 경우:
멀티 프로세스 방식: 요청마다 새로운 프로세스를 생성해야 하므로,
프로세스 생성 및 문맥 교환 오버헤드가 크다.
멀티 스레드 방식: 하나의 프로세스에서 여러 개의 스레드가 요청을 병렬로 처리하므로,
오버헤드가 감소하고 응답 시간이 단축된다.
👉 결론적으로, 멀티 프로세서 환경에서 멀티 스레드를 활용하면
리소스를 효율적으로 사용하면서 빠른 성능을 낼 수 있다.
1. 안정성 문제
멀티 프로세스 모델에서는 각 프로세스가 독립적으로 동작하므로 하나의 프로세스에서 문제가 발생해도 다른 프로세스들은 영향을 받지 않기 때문에 프로그램이 죽지 않고 계속 동작할 수 있다. 그러나 멀티 스레드 모델에서는 기본적으로 하나의 스레드에서 문제가 발생하면 다른 스레드들도 영향을 받아 전체 프로그램이 종료될 수 있다.
2. Context Switching Overhead
context switching, 동기화 등의 이유 때문에 싱글 코어 멀티 스레딩은 스레드 생성 시간이 오히려 오버헤드로 작용해 단일 스레드보다 느리다.
3. 디버깅이 어려움
멀티 스레드를 사용하면, 여러 개의 스레드가 동시에 실행되기 때문에, 각 스레드의 동작을 추적하기 어려울 수 있다. 예를들어 코드를 디버깅하는 도중에 다른 스레드가 실행되어 예기치 않은 결과가 발생할 수 있다. 또한 어떤 스레드가 언제 어떤 자원에 접근하고, 어떤 순서로 실행되는지 등을 파악하기 어려울 수 있다.
따라서 스레드 간의 상호작용과 동기화 기법을 잘 이해하고, 디버깅 도구를 적극적으로 활용해야 한다.