프로세스와 스레드를 완벽하게 이해하려면 동시성(Concurrency)과 병렬성(Parallelism)에 대해서도 알고 있어야 하는데, 오늘은 이 개념들까지 정리해볼까한다.

프로세스

프로세스는 프로그램을 실행해서 돌아가고 있는 상태, 즉 컴퓨터가 어떤 일을 하고 있는 상태를 프로세스라고 한다. 그런데 왜 동시성과 병렬성에 대해 알아야 하는 걸까? 그 이유는 운영체제가 여러개의 프로세스를 한번에 돌리고 있기 때문이다.

그렇다면 왜 여러 프로세스를 한번에 돌리는 것일까? 우리가 컴퓨터를 사용할떄, 보통은 한가지 작업만을 하지 않는다. 유튜브를 보며 이렇게 블로그 글을 쓴다거나, 인터넷 쇼핑하면서 카톡을 한다거나… 다양한 작업을 동시에 하게 되는데, 이렇게 동시에 할 수 있는 이유가 이 각각의 프로세스가 병렬성, 동시성 혹은 이 둘의 혼합으로 이루어져 있기 때문이다.

그렇다면 이제 동시성과 병렬성에 대해 알아보자.

  • 동시성(Concurrency) : 프로세스 하나가 이거 조금, 저거 조금… 돌아가면서 일부분씩 진행하는 것을 말한다. 그리고 이렇게 진행 중인 작업을 바꾸는 걸 Context Switching이라고 한다. 이 과정이 너무 빨리 돌아가니까 사람들에게는 이 프로세스들이 동시에 진행되는 것처럼 느껴져서 동시성이라고 부르게 되었다.

  • 병렬성(Parallelism) :프로세스 하나에 코어 여러개가 달려서 각각 동시에 작업들을 수행하는 것을 말한다. CPU의 속도가 발열과 같은 물리적 제약에 직면하여 예전만큼 빠르게 발전하지 못하자, 그 대안으로 여러 코어를 여러개 달려서 작업을 분담할 수 있도록 만든 것이다.

process

스레드 (Thread)

한 프로세스내에서도 여러 갈래의 작업들이 동시에 진행될 필요가 있다. 이 갈래를 스레드라고 부른다. 프로세스들은 컴퓨터 자원을 분할해서 쓰지만, 스레드는 프로세스마다 주어진 전체 자원을 함께 사용한다.

간단한 예를 보자.

김밥천국의 요리 메뉴 하나하나가 프로세스라고 보자. 프로세스(요리사)는 혼자 돌아댕기면서 이 메뉴들을 만든다. 프로세스안에는 계란부침을 만드는 스레드, 김에 밥을 펴 바르는 스레드, 참치마요를 만드는 스레드 등이 진행된다.

  • 스레드 장점 : 동시에 많은 일을 처리할 수 있다. 때문에 같은 일을 더 빠른 시간안에 처리할 수 있다.

  • 스레드 단점 : 스레드 두개가 동시에 손을 대면, 현실세계에서는 로맨스물이 되지만, 컴퓨터 세계에서는 에러물이 된다. 자원을 공유하기 때문에 동기화 문제가 발생할 수 밖에 없다.

간단하게 프로세스와 스레드에 대해 알아봤다. 멀티스레드나 멀티 프로세스와 같은 단어도 아마 들어봤을텐데, 스레드와 프로세스에 대해 이해를 잘했다면, 사실 바로 이해되었을꺼라 생각한다. 멀티스레드는 말 그대로 프로세스 안에 두개 이상의 스레드가 있는 것을 이야기한다. 멀티 프로세스도 마찬가지이다. 멀티스레드나 멀티 프로세스에 대한 더 자세한 이야기는 다음 포스팅때 다루도록 하겠다.