키워드
프로그램, task, CPU 스케쥴링
컴퓨터가 어떤 작업을 수행하는데 필요한 코드의 집합을 우리는 프로그램이라고 한다. 이 프로그램을 사용자가 실행하는 경우, 컴퓨터는 이 코드를 자신이 읽을 수 있는 기계어로 번역하여, 메모리에 작업량을 할당하여 해당 작업이 실행되도록 한다. 이 과정을 프로세스라고 한다.
키워드
프로세스 > 스레드
스레드는 현재 프로세스 내에서 실행되는 흐름의 단위를 말한다. 과거의 PC에서는 프로그램을 실행하는 경우 해당 과정이 끝날 때 까지 다른 작업을 진행하지 못하는 경우가 있었다. 시간이 지나면서 사용자가 느끼는 문제를 해결하기 위해, 나온 아이디어가 아마, “한 프로그램을 여러 구역에서 분담하여 처리하면 되지 않을까” 일 것이다. 다만 프로세스의 경우, 프로세스 자신에게 할당된 메모리 내의 정보만 접근이 가능하기 때문에, 자원을 공유할 수 있는 뭔가 다른 실행 단위의 개념이 필요했고 그렇게 스레드 나타나게 되었다.
스레드는 프로세스와는 다르게 스레드 간 메모리를 공유하며 작동한다. 스레드끼리 프로세스의 자원을 공유하면서 작동한다. 스레드끼리 프로세스의 자원을 공유하면서 프로세스 실행 흐름의 일부가 되는 것이다.
즉 스레드는 프로세스에 코드에 정의된 절차에 따라 실행되는 특정한 수행 경로라고 할 수 있다.
키워드
자원 공유의 차이
프로세스와 스레드의 가장 큰 차이는 프로세스는 자원을 공유하지 않지만 스레드는 자원을 공유할 수 있다는 것이다. 현재의 컴퓨터는 더이상 하나의 쓰레드나 하나의 프로세스만을 사용하지 않는다. 하나의 프로그램을 작업하는데 여러개의 프로세스 혹은 여러개의 쓰레드를 사용하여, 예전 대비 더 많은 혹은 시간이 오래걸리는 일들을 재빠르게 처리하는 것이 가능해졌다.
그럼 어떤 경우, 프로세스를 여러개 사용하고 어떤 경우, 쓰레드를 여러개 사용하는 가? 이 부분이 할당된 자원을 공유할 수 있는냐 아니냐의 차이에서 명백하게 나눠진다.
하나의 작업을 수행하는데 두 개 이상의 프로세스를 동시에 사용하는 것을 말한다. 일반적으로 작업과정이 명확하게 독립되어 진행이 가능한 작업들의 경우 멀티 프로세스로 진행하게 된다. 작업을 하는 CPU는 일반적으로 하나의 작업밖에 처리하지 못한다. 따라서, A 프로세스 조금, B 프로세스 조금, C 프로세스 조금 이렇게 하나하나 번갈아가며 처리하게 되는데, 컴퓨터의 시간은 사용자에게는 너무나도 빨라 마치 프로그램이 동시에 실행되는 것 처럼 보이는 데 이를 멀티태스킹 이라고 한다. 그리고 CPU 가 이렇게 여러 프로세스를 번갈아가면 작업을 실행하는 과정을 컨텍스트 스위칭이라고 한다.
하나의 프로세스를 여러 쓰레드로 자원을 공유하며 작업을 수행하는 것을 의미한다. 우리가 요리라는 큰 작업 내에서, 돈까스를 만드는 작업과, 라면을 만드는 작업을 했다고 보자. 들어가는 재료도, 만드는 요리 과정도 다 다르기에 돈까스를 만드는 작업과 라면을 만드는 작업은 멀티 프로세스로 진행할 수 있다고 말할 수 있다.
돈까스를 만드는 게 멀티 프로세스라면 멀티 스레드는 기름에 열을 올리고, 고기를 다지고, 빵가루를 입히고, 튀기는 등 더 쪼개어 분류한 작업이라고 볼 수 있다. 멀티 쓰레드에서는 고기, 기름, 빵가루 등이 모든 작업마다 필요한 자원에 대한 접근이 가능해진다. 돌려 이야기 해보면 빵가루 작업을 하는데 있어, 라면 요리하는 과정에서 다녀오거나 할 필요가 없다.
이처럼 멀티 스레드를 통해 작업하는 경우 멀티 프로세스 대비 시스템 자원 소모가 감소하여 효율성이 개선된다.
두 방법 모두 동시에 여러 작업을 수행하는 점을 동일하나, 장점 단점이 있기에 적용하는 프로그램마다 적합한 처리과정을 선택해야한다.
멀티 스레드는 멀티 프로세스 보다 메모리 효율적인 처리방식이며, 컨텍스트 스위칭에 멀티 프로세스 보다 빠른 장점이 있지만, 하나의 작업이 잘못되는 경우 해당 연관작업이 모두 종료될 수 있는 위험을 가지고 있다.
멀티 프로세스는 자원의 공유가 어려워, 컨텍스트 스위칭 마다 멀티 스레드 대비 작업량이 더 많지만, 하나의 작업이 종료되더라도, 다른 프로세스에 영향을 주지 않아 안정성 측면에서 우수하다.
참고
[10분 테코톡] 🌷 코다의 Process vs Thread
프로세스는 뭐고 스레드는 뭔가요?
프로세스와 스레드의 차이
멀티 스레드(Multi Thread) & 멀티 프로세스(Multi process)