Home [CS] 프로세스와 스레드 01 - 프로세스의 기본 개념
Post
Cancel

[CS] 프로세스와 스레드 01 - 프로세스의 기본 개념

개요

안녕하세요.

이번 글에서는 프로세스와 스레드의 개념을 살펴보겠습니다.


프로세스

프로세스와 프로그램

위키백과에서는 프로세스를 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램로 정의합니다.

그렇다면 우리가 늘 사용하는 프로그램과는 어떻게 다를까요??

프로그램은 일반적으로 하드 디스크 등에 저장되어 있는 실행코드를 의미합니다.

반면 프로세스는 프로그램을 구동하여 프로그램 자체와 프로그램의 상태가 메모리 상에서 실행되는 작업 단위를 의미합니다.

따라서 다음 그림과 같이 정리할 수 있습니다.

프로그램과 프로세스 [그림01] 프로그램과 프로세스

프로세스 메모리 구조

프로세스는 Stack, Heap, Data, Code의 4가지 영역으로 나뉘어 저장됩니다.

프로세스의 메모리 구조 [그림02] 프로세스의 메모리 구조

① Stack 영역

  • 데이터 임시 저장
  • 지역변수에 사용하며 변수가 범위 밖으로 이동하면 공간 해제

② Heap 영역

  • 코드 영역과 별도로 유지되는 자유 영역
  • 동적 메모리 할당

③ Data 영역

  • 프로그램의 가상 주소 공간
  • 전역변수나 정적변수를 저장하거나 할당하고 실행 이전 초기화

④ Code 영역

  • 코드의 실행 명령을 포함하는 메모리이거나 목적 파일에 있는 프로그램 영역
  • 프로그램 시작할 때 프로세서가 디스크에서 읽어 실행하는 컴파일한 프로그램

스레드

스레드 개념

스레드는 프로세스 안에서 실행되는 여러 흐름 단위입니다.

스레드 구조

스레드 구조 [그림03] 스레드 구조

스레드는 프로세스의 직접 실행 정보를 제외한 나머지 프로세스 관리 정보를 공유합니다.

그 외에 스레드 실행 환경 정보(문맥 정보), 지역 데이터, 스택을 각 스레드가 독립적으로 소유합니다.

스레드 특징

① 사용자 응답성 증가

프로그램의 일부분을 봉쇄하거나 긴 작업을 수행하더라도 병렬 프로그래밍으로 프로그램을 계속 실해어할 수 있어 응답성이 증가합니다.

다중 스레드를 적용한 웹브라우저라면 스레드 한 개가 파일을 로딩하고 다른 스레드는 사용자와의 상호 작용이 가능합니다.

② 프로세스 자원과 메모리 공유

스레드들은 프로세스 자원 하나와 메모리를 공유합니다.

프로그램 하나가 동일한 주속 공간에서 스레드 여러 개를 실행하므로 시스템 성능 향상이 가능합니다.

③ 경제성 우수

스레드의 문맥 교환은 프로세스의 문맥 교환보다 경제적입니다.

④ 다중 처리(멀티 프로세싱)로 성능과 효율 향상

각 스레드를 여러 프로세서에서 병렬 실행하므로 성능과 효율성의 개선이 가능합니다.


프로세스와 스레드의 비유

마지막으로 프로세스와 스레드를 비유를 통해 간단히 알아보겠습니다.

우리 반 담임선생님의 생일 파티를 하자!

우리 반 담임선생님의 생일 파티를 하게 되었습니다.

크게 3가지 일을 선정하고 각각의 계획에 맞게 우리 반을 각각의 팀으로 나눕니다.

우리 반을 팀으로 나누기 [그림04] 우리 반을 팀으로 나누기

이 중에서 교실꾸미기팀을 자세히 보겠습니다.

교실꾸미기팀을 조별로 나누기 [그림05] 교실꾸미기팀을 조별로 나누기

교실꾸미기팀은 세부적으로 다음과 같은 일을 해야합니다.

  1. 청소하기
  2. 꾸미기
    1. PPT 만들기
    2. 풍선 불기
    3. 칠판에 그림그리기

고민을 하던 반장은 10명이서 하나의 일을 하는 대신, 해야할 일에 맞게 교실꾸미기 팀을 4개의 조로 나누고 각 조에게 해야할 일을 주었답니다.

이렇게 잘 짜여진 계획과 모두의 노력 덕분에 담임선생님은 오랫동안 기억에 남는 생일파티를 받았습니다!

그렇다면 프로세스와 스레드는 어디에?

위의 예시에서 팀=프로세스, 교실꾸미기 팀의 조=스레드로 비유했습니다.

큰 목표(생일파티)를 위해 서로 협력하는 팀(프로세스)들이 존재합니다.

가장 많은 일을 해야하는 팀(교실꾸미기팀)에는 가장 많은 인원(자원)이 있습니다.

하지만 모든 인원이 하나의 일을 하는 것은 비효율적이라고 생각됩니다.

게다가 각각의 일을 다른 팀으로 만들어 나눌만큼 비중이 있어보이지않고 또 교실이라는 공간에서 함꼐 이루어져야 합니다.

그래서 교실꾸미기팀 안에 4개의 조(스레드)를 만들고 인원(자원)과 일(작업)을 나누어줌으로써 효율적으로 교실을 꾸밀 수 있었습니다.


마무리하며

이번 글에서는 프로세스와 스레드의 개념을 살펴보았습니다.

프로세스는 프로그램이라는 실행 코드를 실제 메모리에 적재하여 실행하는 작업 단위라고 정리할 수 있습니다.

스레드는 이 프로세스 안에서 실행되는 여러 흐름 단위입니다.

이 글이 조금이나마 도움이 되셨으면 합니다.

감사합니다. 😀


참고 문헌

This post is licensed under CC BY 4.0 by the author.

[Python] Python Garbage Collector

[Web] robots, sitemap, RSS

Comments powered by Disqus.