Computer Science

프로세스와 스레드

Oscar:) 2024. 4. 21. 18:00

 

 

지난 포스팅에서 프로세스에 대해 알아보았다.

 

이번 포스팅에서는 프로세스와 스레드의 관계에 대해서 알아보자.

 

 


 

 

프로세스와 스레드에 관련해서는 개별 포스팅을 작성하였으니,

이번 포스팅에서는 간단히 정리만하고 넘어간다.

 

 

프로세스

 

 

프로세스는 컴퓨터에서 실행 중인 프로그램을 뜻한다.

 

또한 프로세스는 운영체제에 의해 관리되며 자원을 할당 받을 수 있는 단위이며,

하나의 프로세스는 최소 하나의 스레드를 가진다.

 

이외의 프로세스에 대한 자세한 내용은 이전 포스팅에서 참고 바란다.

 

 

프로세스 / 프로세스 실행 · 제어 · 상태

지난 포스팅에서 운영체제에 대해 정리해 보았다. 운영체제의 핵심 서비스 중 하나로 프로세스 관리를 꼽을 수 있는데, 이번 포스팅에서는 프로세스에 대해 알아보겠다. 프로세스란? 프로그램

oscarstory.tistory.com

 

 

 


 

스레드

 

 

스레드는 프로세스를 구성하는 실행의 단위이다.

 

프로세스를 구성한다는 말은 즉, 스레드가 프로세스에 포함된다고 할 수 있다.

또한 하나의 프로세스는 여러 개의 스레드를 가질 수 있다.

 

 

오래전에 작성한 글이지만, 위 내용은 이전 포스팅에서도 다룬적이 있다.

 

 

[Java] Thread (1) - 스레드란 무엇인가?

우리는 여러가지 흐름 속에 살고 있다. 프로그램 또한 마찬가지로, 그들만의 흐름이 있다. 이번 포스팅에서는 스레드의 기초적인 개념을 공부해보자. 스레드란? 사전적 의미로는 '실, 가닥, 흐름

oscarstory.tistory.com

 

 

 


 

프로세스와 스레드

 

 

✅ 프로세스와 스레드

 

이제 프로세스와 스레드간의 관계에 대해 알아보자.

 

 

위에서도 언급했지만, 프로세스는 스레드를 포함하고 있다.

 

 

전통적인 관점에서는 하나의 프로세스는 한 번에 하나의 작업만을 처리했다.

하지만 스레드라는 개념이 도입되면서, 하나의 프로세스가 여러 작업을 동시에 처리할 수 있게 되었다.

 

프로세스에서 여러 스레드가 실행된다는 말은,

여러 명령어를 동시에 실행할 수 있다는 이야기다.

 

 


 

그럼 프로세스 내에서 스레드가 처리하는 작업에 대해 알아보자.

 

이전 포스팅에서 프로세스는 다음 4가지 요소를 영역으로 나누어 관리한다고 했다.

→ 코드, 데이터, 스택, 힙

 

스레드는 프로세스에게서 스택만을 할당받고,

나머지 자원은 공유하며 사용한다.

 

 

 

스레드는 프로세스의 자원을 공유하며 실행된다는 것이 둘 관계의 핵심이라 할 수 있다.

 

 


 

✅ 멀티 프로세스와 멀티 스레드

 

컴퓨터의 실행 과정에서 여러 프로세스가 동시에 실행될 수 있고,

그 프로세스를 이루는 스레드 또한 여러 개 존재할 수 있다고 했다.

 

이때 여러 프로세스를 동시에 실행하는 것을 멀티 프로세스라고 하며,

여러 스레드를 하나의 프로세스에서 실행하는 것을 멀티 스레드라고 한다.

 

 

 

그럼 동일한 결과의 작업을 수행한다 가정하고 다음 2가지 작업을 비교해보자.

스레드는 "Hello World!"를 출력하는 작업을 한다고 가정한다.

 

● 단일 스레드 프로세스 여러 개를 실행하는 작업

● 멀티 스레드 프로세스 한 개를 실행하는 작업

 

일단 위 2가지 작업을 그림으로 표현해보자.

 

 

결과적으로는 2가지 작업 모두 "Hello World!"를 3번씩 출력한다.

하지만 핵심은 출력 결과가 아니다.

 

 

멀티 프로세스 작업의 경우, 프로세스 2·3이 프로세스1을 fork 하게 된다.
결국 각 프로세스는 동일한 코드 · 데이터 · 스택 · 힙 영역을 갖더라도,
모든 자원이 복제되어 메모리에 적재된다.

이는 동일한 내용을 중복해서 메모리에 적재하는 일종의 낭비라 볼 수 있다.

반면 단일 프로세스 멀티 스레드 작업의 경우 프로세스 내 자원을 공유하기에
최소한의 정보만으로 작업을 실행할 수 있고, 메모리를 더 효율적으로 사용할 수 있게 된다.

 

 

이렇게 보면 멀티 프로세스보다는 멀티 스레드가 확실히 유리해보이지만,
장점이 있다면 단점도 있기 마련이다.

자원을 공유한다는 특성은, 한 스레드에서 문제가 발생할 경우 다른 스레드에 영향을 끼칠 수 있다.
반면 멀티 프로세스의 경우, 한 프로세스에 문제가 생겨도 다른 프로세스에 영향이 없거나 적다.

 

 


 

 

이처럼 대부분의 운영체제는 프로세스와 스레드를 구분한다.

하지만 프로세스와 스레드를 명확히 구분짓지 않는 케이스가 있는데,

대표적으로 리눅스 운영체제가 해당된다.

 

리눅스의 창시자 '리누스 토르발스'는

프로세스와 스레드를 모두 실행의 문맥이라는 점에서 동등하다고 간주했다.

리눅스에서는 이 둘을 Task 라고 통일하여 부른다.

 

 

관련 내용은 다음 링크에서 확인할 수 있다.

 

Linux-Kernel Archive: Re: proc fs and shared pids

Re: proc fs and shared pids Linus Torvalds (torvalds@cs.helsinki.fi) Tue, 6 Aug 1996 12:47:31 +0300 (EET DST) On Mon, 5 Aug 1996, Peter P. Eiserloh wrote: > > We need to keep a clear the concept of threads. Too many people > seem to confuse a thread with a

lkml.iu.edu

 

운영체제 창시자의 시점에서 바라본 프로세스·스레드에 대한 철학을 엿볼 수 있으니,

관심있는 사람은 읽어보기 바란다.

 

 

 


 

 

 

이번 포스팅에서는 프로세스와 스레드 간의 관계에 대해 알아보았다.

 

 

 

*자료 출처 : [혼자 공부하는 컴퓨터 구조 + 운영체제] 서적 - 강민철 지음