Post

프로세스와 쓰레드

메모리 구조

프로세스와 쓰레드를 이해하기 전에 메모리 구조를 먼저 알고가면 좀 더 쉽게 이해가 가능하다. 메모리구조

출처: http://www.tcpschool.com/

이미지와 같이 메모리는 Stack, Heap, Data, Code 영역으로 구분된다.

  • Stack - 함수 호출 시 생성되는 지역변수와 매개변수를 저장하는 메모리 영역
  • Heap - 런타임 중에 동적으로 할당/해제 되는 메모리 영역
  • Data - 전역변수와 static 변수가 저장되는 메모리 영역
  • Code - 컴파일 후 기계어로 저장된 코드가 저장되는 메모리 영역

Heap은 동적으로 메모리를 할당/해제 되는 특성 때문에 heap영역과 stack 영역 사이에 공간이 있는 것을 확인할 수 있다.

프로세스란(Process)?

프로세스는 프로그램이 메모리 내에 적재되어 CPU를 할당받아 실행되는 것을 프로세스라 하는 것이다. 프로세스 = 프로그램 이라고 말해도 어떻게 보면 맞는 말이라 할 수 있다.

코드를 작성해 컴파일 한 후 하드디스크에 저장되어있는 것을 프로그램이라고 하고, CPU가 프로그램을 연산하기 위해서 RAM 영역에 적재한 것을 프로세스라고 한다.

프로세스는 다른 프로세스와 메모리 영역을 공유할 수 없으며 예로는 구글 크롬 브라우저의 탭이 있다. 그걸 보면 탭끼리 서로 영향을 안주는 것을 알 수 있다.

쓰레드 (Thread)

쓰레드는 위에 프로세스가 서로 메모리를 공유하지 못하는 특성을 보완하기 위해 만들어진 프로세스 내에서 독립적인 기능(독립적인 함수 호출)을 수행할 수 있는 작업 단위이다.

쓰레드는 Stack 메모리를 제외한 나머지 memory 영역(heap, data, code)을 공유할 수 있고, 이렇게 하나의 process가 동시에 thread를 여러 작업을 병렬로 처리하는 것을 multi thread라고 한다.

stack을 제외하는 이유는 위에 언급한 독립적인 기능을 수행하기 위해선 각자의 stack memory가 필요하기 때문이다.

멀티 쓰레드의 예를 얘기하자면 트위치 스트리밍 같은 것이 있다. 영상 데이터를 가져와야 하고, 댓글을 써야하고, 하나의 프로세스 내에서 여러가지 기능을 독립적으로 수행할 수 있는 것을 확인할 수 있다.

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