프로세스는 실행중인 프로그램이라고 할 수 있다.
프로그램을 실행하면 OS로 부터 실행에 필요한 자원(메모리)을 할당받아 프로세스가 된다.
프로세스는 프로그램을 수행하는데 필요한 데이터와 메모리 등의 자원 그리고 쓰레드로 구성되어있다.
프로세스 = 데이터 + 메모리 + 쓰레드
프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 쓰레드이다. 모든 프로세스에는 하나 이상의 쓰레드가 존재하며, 둘 이상의 쓰레드를 가지면 멀티 쓰레드 프로세스라고 한다.
하나의 프로세스에 대해 쓰레드의 개수에 제한은 없지만, 쓰레드는 작업하는 데 메모리 공간(호출스택)을 필요로하기 때문에 메모리 사용량에 유의해야한다.
멀티태스킹은 여러개의 프로세스가 동시에 실행되는 것이다. 대부분의 OS에서 지원한다.
멀티쓰레딩은 하나의 프로세스 내에서 여러개의 쓰레드가 동시에 작업을 하는 것이다.
CPU의 코어는 한 번에 하나의 작업만 수행하므로, 실제로 동시에 처리되는 작업의 개수는 코어의 개수와 동일하지만, 짧은 시간동안 반복하여 수행하여 여러개의 작업들이 동시에 수행되는 것처럼 보이게 한다.
프로세스의 성능과 쓰레드의 개수는 양의 상관관계는 아니다.
<aside> 💡 멀티 쓰레딩의 장점
</aside>
예를들어, 메신저로 채팅을하며, 파일을 다운받을 수 있고, 음성대화를 나눌 수 있는 것이 멀티쓰레드로 작성되었기에 가능한 일이다.
여러 사용자에게 서비스를 해주는 서버 프로그램의 경우 멀티쓰레드로 작성하는 것은 필수적이다. 하나의 서버 프로세스가 여러 쓰레드를 생성해서 쓰레드와 사용자의 요청이 일대일로 처리되도록 해야한다.
싱글 쓰레드의 경우는 사용자의 요청마다 프로세스를 새로 만들어야한다. 이는 시간도 오래걸리고, 메모리 공간도 더 차지한다.
쓰레드를 가벼운 프로세스(LWP, light weight process)라고 하기도 한다.
단점도 있다.
여러 쓰레드가 같은 프로세스 내에서 자원을 공유하면서 작업하기 때문에 동기화(synchronization), 교착상태(deadlock)와 같은 문제가 있다.