프로세스와 스레드에 대해 알아보자(feat. 주방)

2
post-thumbnail

프로세스와 스레드에 대해 알아볼것인데, 아주 쉽고 간략하게 알아보자
메모리나 CPU에 대한 세부적인 설명은 없으니 혹시 필요한 사람은 따로 알아보자.


프로그램

먼저 프로그램이란 ??

  • 구글 : 어떤 문제를 해결하기 위해 컴퓨터에게 주어지는 처리 방법과 순서를 기술한 일련의 명령문의 집합체
    즉 프로그램은 코드의 집합일 뿐, 실행되는 것은 아니다. 하드디스크에 저장하는 파일의 형태라고 생각하면 될것이다.

프로세스

  • 프로세스(process)는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다 (위키백과)

프로세스는 소스 파일인 프로그램을 실행시켜, 메모리 위에서 코드가 실행되고 있는 상태를 뜻한다.
작업관리자를 켜보면 실행중이라고 뜨는 많은 어플리케이션들이 바로 프로세스인것이다!!

프로세스들...

이는 운영체제로부터 작업을 할당받는 작업업의 단위로 설명할 수도 있다.
할당받는 시스템 자원으로는

  • CPU 시간
  • 프로세스가 운영되기 위해 필요한 주소공간
  • 힙, 데이터, 코드, 스택의 구조를 갖는 독립된 메모리 공간

지금부터는 주방에 비유해보겠다.

프로그램은 주방으로 비유하면 레시피다. 레시피만으론 아무것도 할 수 없지만, 레시피를 보고 조리할줄 아는 요리사와 레시피에 맞는 재료가 있을경우 요리를 할 수 있다.
코드의 모음도 레시피와 같다. 코드만으로는 아무것도 되지못하고, CPU, 메모리라는 요리사, 재료와 합쳐지면 맛있는 프로세스가 된다.

  • 그렇다면 주방에서 프로세스는 무엇인가?

    주방의 구성요소들이라고 생각했다. 조리사, 냉장고, 조리도구 등이 있어야 요리가 완성될 수 있고, 또 이 구성요소들은 각각을 다른 것으로 볼 수 있다.


    그렇다면 스레드는 뭘까?

  • 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 이러한 실행 방식을 멀티스레드(multithread)라고 한다. (위키백과)

프로세스와 스레드의 가장 큰 차이점은 스레드는 프로세스의 구성요소라는 점이다. 또한 프로세스는 독립적인 메모리 공간을 할당받지만, 스레드는 프로세스 하위의 구성요소기 때문에 아무리 많은 스레드를 생성해도 프로세스에 할당된 메모리 영역만 점유할수 있다.

나는 이 스레드를 주방의 조리사로 생각했다. 주방이 작동하기 위해선 꼭 한명 이상 필요하고, 여러명을 둘 수도있지만, 조리사는 허락받지 않은 다른 주방에 가서는 안될것이다.

프로세스라는 주방에 스레드라는 주방장을 둬 성공적으로 식당을 개업했다. 초기에는 손님이 많이 찾지 않아서 혼자서도 요리를 다 할 수 있었지만, 만약 입소문이 나서 주문량이 늘어난다면 식당은 무슨 일을 할 수 있을까?


멀티스레드

멀티스레드는 한 프로세스 내에 여러 스레드를 할당해서 힙, 코드, 데이터 영역의 메모리를 공유자원으로 두고, 스택 메모리 영역을 각자 사용할수 있게 한다.

그렇다. 조리사를 추가로 고용한 것이다.

추가로 고용된 조리사들은 다음과 같은 규칙을 갖는다.
1. 냉장고는 모든 조리사들이 동시에 접근 가능하다.
2. 각자 할당된 조리도구를 제외하고 다른 조리사의 조리도구는 사용할 수 없다.

냉장고가 바로 프로세스에 할당된 여러 스레드가 동시에 접근 가능한 힙, 코드, 데이터 메모리 영역이고, 각자의 프라이팬이 바로 스레드별 스택 메모리가 될것이다.

하지만 여기서 주의할점이 있다. 바로 1번 항목인
냉장고는 모든 조리사들이 "동시"에 접근 가능하다는 것이다.
이와 관련해 생기는 동시성(동기화) 문제는 나중에 자바와 스프링에서 알아보도록 하겠다.

이외에도 
--------------------------------------------------------------
- 시스템 자원소모 감소
- 시스템 처리율 향상
- 간단한 통신으로 프로그램 응답시간 단축
같은 장점이,
--------------------------------------------------------------
- 하나의 스레드에 문제가 생기면 전체 프로세스에 문제가 생길수 있다.
- 단일 프로세스 시스템의 경우 효과를 기대하기 어렵다.
같은 문제점이 있다.

그럼 멀티프로세스는?

손님이 더더욱 많아졌다. 하지만 주방의 크기에 한계가 생겨 더이상 조리사를 고용할 수 없다. 마침 식당과 붙어있는 공실이 하나 있다고 한다. 그럼 어떤 선택을 할 수 있을까?

멀티 프로세스는 다수의 프로세스가 협력적으로 하나 이상의 작업을 동시에(병렬) 처리 하는 것이다.

식당과 붙어있던 공실(컴퓨터의 메모리)에 조리도구와 냉장고(메모리 할당)를 배치하고 새롭게 주방으로 구성한 뒤(프로세스 실행) 조리사를 고용해(멀티 스레드) 조리가 가능하게 했다.

이제 주방이 두배가 됐으니 조리속도가 두배가 될것이다.(실제로 컴퓨터에선 컨텍스트 스위칭과 같은 문제로 두배가 되진 않을것이다)

이제 주방으로 예시 들기가 힘들어서 그냥 나열형으로 쓰자면

  • 장점
  1. 독립된 구조로 높은 안정성
  2. 프로세스 중 하나가 죽어도, 다른 프로세스에 영향 X
  • 단점
  1. 독립된 메모리 영역이기 때문에 컨텍스트 스위칭으로 인한 오버헤드가 발생해 성능 저하 발생
  2. 독립된 메모리 영역이기 떄문에 자원 공유에 비효율성을 가진다.

마무리

식당에 비유해 간단하게 프로세스와 스레드에 대해 알아봤지만, 사실 딥하게 보려면 정말 어려운 내용이고, 글에서 언급하지 않은 수많은 장단점이 있다. 흥미가 생겼다면 이 글에서 멈추지 말고 다른 구체적인 글들을 찾아보도록 하자.

SOURCE

테코톡 | 코다의 Process Vs Thread
wooody92's blog | 멀티프로세스와 멀티스레드
Inpa Dev | 멀티 프로세스 vs 멀티 스레드 비교

0개의 댓글