프로세스와 스레드 그리고 차이점

Song-YunMin·2020년 11월 25일
0
post-thumbnail

서론

오늘은 프로세스스레드의 차이점에 대해 다룬다.
Velog 탐방 중, 기술 면접 질문 모음이라는 포스트를 보며 하나씩 정리하면 좋을 것 같다고 생각했다.

사실 컴퓨터 공학도라면 기초적으로 알아야 하는 지식이지만, 워낙에 배워야 할 것은 많고.. 나의 뇌 용량은 한계가 있기 때문에 주기적으로 Remind 하기로 했다.

프로세스(Process)

프로세스를 이해하려면 프로그램과 비교하면 편하다.

프로그램실행가능한 명령어의 집합인데, 컴파일된 바이너리 이미지 형태일 수도 있고, 파이썬 스크립트 같이 해석되는 고급어 형태일 수도 있다.

프로그램에 대한 예제로는 정말 많지만, 우리가 자주 쓰는 파워포인트, 워드 이런 것들이 모두 프로그램이다.

프로그램? 프로세스?

여기서 프로세스란 실행되고 있는 프로그램 을 뜻한다. 즉 메모리에 Load되어 실행되고 있는 프로그램 이다.

'프로세스프로그램인스턴스다' 라고도 표현할 수 있다고 한다.
실제 객체지향의 클래스/ 인스턴스 관계와프로그램/프로세스관계는 공통점이 존재하는데, 이는 하나의 클래스 가 여러개의 인스턴스 를 만들 수 있는 것처럼 하나의 프로그램 에서 여러개의 프로세스를 생성할 수 있다. 예를 들어 윈도우즈에서 메모장 프로그램을 여러개 실행 시키는 것과 같다.


(그림 1 - 프로세스 구조)

프로세스OS Kernel에 의해 직접 관리된다.
Kernel 메모리 내부에는 각 프로세스 마다 관리되는 프로세스에 대한 데이터가 존재한다. 이 정보를 PCB (Process Control Block) 라고 하며, PCB에 대해선 관련 링크를 첨부한다. PCB(Process Control Block)란?

프로세스 는 별도의 주소공간에서 실행되며, 한 프로세스는 다른 프로세스변수자료구조에 접근할 수 없다. 한 프로세스가 다른 프로세스의 자원의 접근하려면 프로세스 간 통신(IPC, Inter-Process Communication)을 사용해야 한다. 예를 들어 파이프, 소켓 등이 이에 해당된다.

위 내용을 바탕으로 정리하면 아래와 같이 요약할 수 있다.

프로그램(Program) : 프로세스 - PCB
프로세스(Process) : 프로세스 + PCB

스레드(Thread)

스레드 를 말할때는 아래와 같이 정의하면 좋다고 한다.

프로세스 내에서 실행되는 흐름

일반적으로 하나의 프로세스는 하나의 스레드로 시작되며, 이를 메인 스레드 라고한다.
스레드 를 별도로 추가하지 않으면 모든 프로그램은 메인 스레드에서 실행된다.


(그림 2 - 스레드 구조)

스레드프로세스의 특정한 수행 경로이다. 프로그램 상태에서 PCB를 받아 프로세스상태가 되면 자원을 할당받게 되는데, 이 자원을 이용하는 실행의 단위 라고 정의할 수 있다.

MS-DOS 같은 Single Threading OS와 달리 현대 운영체제에서는 하나의 프로세스 내에 여러 개의 스레드가 동시에 존재할 수 있는 Mult-Threading을 지원한다. 이는 실행 중인 프로세스 내에 여러 흐름이 존재할 수 있다는 뜻이 된다.

Mult-Threading이 필요한 이유는 아래와 같다.
- 어떤 작업이 필요한데 내용을 업데이트 해서 데이터 베이스에 저장 해야한다.
- 먼저 파일을 읽어와서
- 내용을 업데이트 하고
- 디스크에 다시 저장한 후에
- 데이터 베이스로 넣는다.
여기서 핵심은 Single Threading 환경에서는 이러한 작업을 순차적으로 처리해야 하고, 위 작업 중 하나의 작업이 오래걸리면 전체 프로그램이 지연되는 병목현상 이 발생할 수 있다.

Mult Threading 환경에서는 이러한 작업의 흐름, 즉 스레드 를 여러개 두면 병목현상에 걸리지 않고 전체 작업시간을 줄일 수 있다는 것이다.

또한 프로세스 간 통신에 비해서 스레드 간 통신이 훨씬 간단하다.
이유는 서로 공유하는 변수를 변경하기만 하면 되기 때문이다. 반면 프로세스간 통신은 그 위험성으로 까다롭게 관리된다.

스레드 이용시 장점

- 프로세스 간 통신에 비해 스레드 간 통신이 훨씬 간단함
- 시스템의 자원 소모가 줄어든다
- 전체 응답 시간이 단축된다.

스레드 이용시 단점

- 여러 스레드를 이용하는 프로그램을 작성하는 경우에는 설계를 더 신경써야 한다.
- 디버깅이 어렵다고 한다.(사실 이유를 잘 모르겠다 아시는분 댓글좀..)

프로세스와 스레드의 차이점

우선 근본적인 둘의 차이는 프로세스운영체제로 부터 독립된 시간, 공간 자원을 할당받아 실행된다는 점이고, 스레드는 한 프로세스 내에서 많은 자원을 공유하며 병렬적으로 실행된다는 것이다.

이로부터 파생되는 차이는 아래와 같다.

프로세스는 독립적이다. 서로 구분되는 자원을 할당 받아 정말 필요한 경우가 아니라면 다른 프로세스에 영향을 미치지 않고 실행된다.
반면, 스레드프로세스의 하위 집합으로 여러 스레드가 같은 프로세스 자원을 공유하기 때문에 독립적이지 않다.
비슷한 의미로 프로세스는 보유한 자원에 대한 별개 주소 공간을 갖지만 스레드는 이 주소 공간을 공유한다.

참고 자료

- https://shoark7.github.io/programming/knowledge/difference-between-process-and-thread
- https://jwprogramming.tistory.com/16

profile
고독한 서버 개발 3년차

0개의 댓글