PengTory

프로세스와 스레드 본문

기타

프로세스와 스레드

펭토리 2022. 12. 11. 01:37

프로세스와 스레드는 자주 비교되는 항목이다. 공부하면서 정리해보자.

먼저 프로세스와 스레드의 개념적 설명을 알아보자.

 

프로세스와 스레드란?

프로세스: 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
스레드: 프로세스 내에서 실행되는 흐름의 단위 혹은 CPU 스케쥴링의 기본 단위

 

프로그램과 프로세스

그렇다면 프로그램이란 무엇일까?

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

메모리에 올라가있지 않았다는 것은 아직 운영체제가 프로그램에게 독립적인 메모리 공간을 할당해주지 않았다는 뜻이다. 모든 프로그램은 운영체제가 실행되기 위한 메모리 공간을 할당해줘야 실행이 가능하다.

정적인 상태란 말 그대로 아직 실행되지 않았으며 가만히 있다는 뜻이다.

쉽게 생각해 프로그램이란 아직 실행되지 않은 파일 그 자체를 말한다. 윈도우에서는 .exe 파일일 것이고 맥OS 에서는 아마 .dmg 파일을 말하는 것이다. 다시말해 프로그램은 그저 코드 덩어리에 불과하다.

아래 사진처럼 프로그램이 메모리에 적재되어 실행되며 프로세스가 된다. 

 

과거에는 게임을 하나 받기 위해서 다운로드 버튼을 누르면 다운이 완료될 때까지 마우스 키보드로 입력을 받는 작업도 모두 할 수 없었다. 이 작업들을 동시에 할 수 없고 한 번에 하나씩만 가능했기 때문이다.

그렇다면 현재는 어떻게 이러한 작업들이 가능한걸까? 그건 바로 컴퓨터가 프로세스 여러개를 함께 돌리는 멀티태스킹이 가능해졌기 때문이다.

 

스레드

크롬과 같은 브라우져도 하나의 프로그램이고 그 프로그램이 돌면서 하나의 프로세스가 진행된다. 

브라우져가 일을 할때도 게임을 다운받는 동시에 다른 페이지로 이동이 가능해야 하며 유튜브 영상을 본다면 영상 데이터를 받아 재생도 시켜야 한다. 이는 한 프로세스 내에서도 여러 갈래의 작업들이 동시에 진행될 필요가 있다는 말이다.

우리는 이 갈래를 스레드 라고 부른다.

프로세스가 진행되는 동안 스레드의 실행 과정

 

예시

이해하기 쉽게 예시를 들어보자.

매우 큰 식당이 있다고 생각해보자. 이 식당에서는 라면, 김밥, 햄버거 등을 판매하고 있다. 식당에 끊임없이 들어오는 라면끓이기, 김밥말기, 햄버거 만들기와 같은 것 하나하나가 프로세스이다.

식당에는 라면을 끓이는 섹션, 김밥을 마는 섹션, 햄버거를 만드는 섹션등을 구분해서 요리를 계속해서 만든다. 이처럼 컴퓨터는 프로세스마다 자원을 분할해서 할당한다.

프로세스들이 운영체제로부터 별도의 메모리 영역을 할당 받은 모습 (이미지 출처:  Heee's Development Blog )

 

그렇다면 섹션별로 하나씩 생각해보자. 햄버거 세션에서 패티를 굽는 스레드가 진행되는 동안 빵에 야채를 얹는 스레드도 함께 진행될 수 있다. 한 메뉴의 스레드들은 같은 조리대에서 진행된다. 만약 패티 굽기와 야채 얹기를 다른 조리대에서 다룬다면 같은 조리대에서 작업하는 것 보다 훨신 비효율적일 것이다. 같은 메뉴를 만들 때는 같은 공간과 장비 즉, 컴퓨터의 같은 자원을 공유하는 것이 더 효율적이다. 이렇게 작업을 하면 속도와 효율면에서 훨씬 뛰어나다.

스레드들이 프로세스의 메모리 영역을 공유하는 모습

 

프로세스와 스레드이 차이

 프로세스는 실행될 때 운영체제로부터 각각 독립된 메모리 영역을 할당받는다. 그러나 스레드는 Stack 영역만 별도로 할당 받고, 부모 프로세스의 Code/ Data/ Heap 메모리 영역의 내용을 공유한다. 즉, 프로세스 내에서 자식 스레드들은 서로 주소 공간이나 자원들을 공유하면서 실행될 수 있다.

 

 만약 한 프로세스를 실행하다 오류가 발생해 프로세스가 강제 종료된다면 어떤 일이 벌어질까? 위 프로세스들이 운영체제로부터 별도의 메모리 영역을 할당 받은 모습을 보면 하나의 프로세스가 종료된다고 다른 프로세스에게 영향을 끼치지 않을 것이라는 것을 알 수 있다.

 그러나 스레드는 Stack 영역만 별도로 할당 받고, 부모 프로세스의 Code/ Data/ Heap 메모리 영역의 내용을 공유한다. 따라서 스레드 하나가 프로세스 내 자원을 망쳐버린다면 같은 프로세스 안에 있는 모든 스레드들이 모두 강제 종료된다. 자원을 공유하기 때문에 필연적으로 동기화 문제가 발생할 수 밖에 없는 것이다.  

 

 

프로세스와 스레드의 기본 개념을 이해했으니 멀티 프로세스와 멀티스레드의 특징에 대해서도 알아보자.

 

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

멀티 프로세스 장단점

 멀티 프로세스란 하나의 애플리케이션을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것이다.

1) 안정성이 좋다. 여러개의 자식 프로세스 중 하나에 문제가 발생해도, 다른 자식 프로세스에 영향이 확산되지 않는다.

2) 구현이 비교적 간단하고, 각 프로세스들이 독립적으로 동작하며 자원의 서로 다르게 할당된다.

3) 메모리 사용량이 많다.

4) 성능 저하의 우려가 있다.

 

멀티 스레드 장단점

멀티 스레드란 하나의 애플리케이션을 여러 개의 스레드로 구성하여 하나의 스레드가 하나의 작업을 처리하도록 하는 것이다. 

1) 응답성이 좋다. 싱글 스레드인 경우, 작업이 끝나기 전까지 사용자에게 응답하지 않는다. 반면 멀티스레드인 경우 작업을 분리해서 수행하므로 실시간으로 사용자에게 응답할 수 있다. 

2) 자원공유 - 프로세스는 오직 공유 메모리나 메시지 패싱을 이용해서 자원을 공유할 수 있지만, 스레드는 자신이 속한 프로세스 내의 스레드들과 메모리나 자원을 공유하여 효율적으로 사용할 수 있다.

3) 경제성 - 프로세스를 새로 생성하는 비용보다 스레드를 새로 생성하는게 더 싸다.

4) 확장성 - 싱글 스레드인 경우 한 프로세스는 오직 한 프로세서에서만 수행 가능하다. 반면 멀티 스레드인 경우 한 프로세스를 여러 프로세서에서 수행할 수 있으므로 훨씬 효율적이다. 

5) 구현 및 테스트, 디버깅이 어렵다.

6) 너무 많은 스레드 사용은 오버헤드를 발생시킨다.

7) 동기화와 교착상태가 발생하지 않도록 주의해야한다.

8) 자식 스레드 중 하나의 문제가 생긴 경우 전체 프로세스에 영향을 줄 수있다.

 

 

[참고 자료]

https://www.crocus.co.kr/1369

https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4

https://www.youtube.com/watch?v=iks_Xb9DtTM 

https://charlezz.medium.com/process%EC%99%80-thread-%EC%9D%B4%EC%95%BC%EA%B8%B0-5b96d0d43e37

https://velog.io/@gil0127/%EC%8B%B1%EA%B8%80%EC%8A%A4%EB%A0%88%EB%93%9CSingle-thread-vs-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C-Multi-thread-t5gv4udj

'기타' 카테고리의 다른 글

JSP & Servlet 간단 요약 정리  (0) 2023.04.26
절대경로와 상대경로  (0) 2023.03.02