프로세스와 스레드

김철회·2022년 10월 26일
0

프로세스와 스레드는?

컴퓨터에는 운영체제라는 것이 있다. 운영체제는 사용자가 컴퓨터를 사용하기 위해 필요한 소프트웨어인데, 컴퓨터를 사용하면서 실행하는 모든 프로그램들은 운영체제에서 관리하고 제어하고 있다.
대표적인 운영체제는 IOS, WIDOWS 등이 있다.

프로세스 : 운영체제로 자원(메모리)을 할당 받은 작업의 단위.
스레드 : 운영체제로 자원을 할당 받은 프로세스의 자원을 이용하는 실행 흐름의 단위.

결론부터 말하자면, 프로세스는 스레드를 포함한다. 프로세스가 큰 실행(작업) 단위라면, 프로세스 내에서 더 작게 실행 단위를 구분해놓은 것이다.

프로그램과 프로세스

프로그램에 대해서 먼저 이해하는 것이 중요하다.

프로그램은 파일이 저장 장치에 저장 되어는 있지만 현재 메모리에는 올라가지 않은 정적인 상태를 말한다.

풀어서 설명하자면, 프로그램은 일종의 코드 뭉치라고 볼 수 있다.

프로그램을 실행하기 위해서 우리는 코드를 작성한다. 이 말이 핵심이다. 프로그램 자체는 스스로 실행되지 않는다. 프로그램을 실행해주는 무언가가 필요하다. 그렇기 때문에 프로그램 자체만을 정의하면 실행 되기 이전의 상태라고 볼 수 있다.

프로그램의 실행 과정으로 알아보는 프로세스
1. 프로그램을 관리하는 운영체제는 프로그램 실행을 위해 독립적인 메모리 공간을 할당해준다.
2. 프로그램을 실행하면 메모리에 해당 프로그램이 올라가게 된다.
3. 그리고 이러한 상태의 프로그램을 프로세스라고 한다.

더 쉽게 말하자면 프로세스는 실행되고 있는 프로그램이라고 볼 수 있다.

프로그램과 스레드

프로세스가 실행되고 있는 컴퓨터 프로그램이라고 한다면, 스레드는 프로세스 내에서의 더 작은 실행 단위를 말한다.

과거엔 프로그램의 실행 처음과 끝을 모두 프로세스 하나만을 사용해서 진행했다고 한다. 역시나 시간이 지나고 고도화되면서 프로그램이 복잡해지고 규모가 커졌다. 이에 따라, 프로세스 하나만으로 프로그램을 실행하는 것이 어려운 상황이 되었다.

가장 쉬운 돌파구는 하나의 프로그램을 위해 여러 프로세스를 두는 것이지만, 운영체제는 안정성을 위해 프로세스마다 할당된 메모리 영역 내에서만 접근할 수 있도록 제약을 두고 벗어나려고 하면 접근 오류를 만들어낸다. 여러 프로세스를 만드는 것은 불가능하다.

결국, 프로세스보다 더 작은 실행 단위가 필요해졌고 이것이 스레드이다.

프로세스와 스레드의 차이

1. 자원 공유
프로세스는 운영체제로부터 할당 받은 메모리 영역 내에서 다른 프로세스와 독립적으로 활동한다.

하나의 프로세스에는 Code/Data/Stack/Heap이 있고, 이는 다른 프로세스와 닿지 않는다.

스레드의 경우, 스레드는 프로세스 내에서의 더 작은 실행 단위이다. 스레드는 프로세스가 할당 받은 영역 내에서 Stack을 제외한 나머지 자원들을 공유한다.

이에 따라, 별도의 Stack을 스레드가 갖고 있지만 나머지 자원은 서로 공유하고 있다.

2. 에러 발생
프로세스 자체는 다른 프로세스와 구분이 명확하게 지어져 있다. 그렇다면 한 프로세스에서 오류가 발생 했을 때, 다른 프로세스가 영향을 받을까? 프로세스끼리는 서로 공유하는 것이 없기 때문에 다른 프로세스는 여전히 잘 실행되고 있을 것이다.

스레드의 경우는 어떨까? 스레드는 프로세스가 할당 받은 자원을 공유하고 있다. 즉, 하나의 스레드에서 에러가 발생하면 스레드끼리는 서로 연결되어 있기 때문에 다른 스레드도 강제 종료 된다.

멀티태스킹과 멀티스레드

멀티태스킹은 하나의 운영체제에서 여러 프로세스가 실행되는 것을 말한다.
멀티스레드는 하나의 프로세스에서 여러 작업을 여러 스레드를 사용하여 동시에 처리하는 것을 말한다.

멀티스레드의 장단점

장점 : 스레드간 자원을 공유하기 때문에 메모리 절약이 가능하다. 또한, 응답이 빠르다.
단점 : 서로 연결되어 있기 때문에 하나의 스레드에서 오류 발생 시, 프로세스가 중단된다.

정리

프로세스란 프로그램을 관리하는 운영체제가 바라보는 최소 작업 단위를 말하며 실행되고 있는 프로그램을 말한다.
스레드는 프로세스 내에서의 더 작은 실행 단위이다.

프로세스와 스레드의 차이자원 공유에러 발생에 있다.
운영체제는 프로그램 실행을 위해 별도의 메모리 공간을 프로세스에게 할당한다. 각 프로세스는 메모리 공간이 구분되어 있어 서로 공유하지 않는다. 이에 따라 다른 프로세스에서 에러가 발생 하더라도 현재 프로세스는 영향을 받지 않는다.

스레드는 프로세스가 갖는 메모리 내에서 Code/Data/Stack/Heap 중 Stack을 제외한 나머지를 공유한다. 자원을 공유하기 때문에 메모리 공간을 절약하고 응답이 빠르지만 하나의 스레드에서 에러가 발생하면 프로세스가 종료된다.

profile
안녕하세요!

0개의 댓글