본문 바로가기
SW 기술 정리

Thread vs Process

by Ralp 2020. 7. 19.

배웠었던 Thread와 Process개념에 대해서 한 번 더 정리하고 가는 시간을 가지려고 합니다.

Process안에 많은 Thread들이 있고, Thread는 하나의 작업이라고 이해하고 있지만,

구체적으로 Define해보려고 합니다.

 

 

두 Thread,Process개념을 정리하기 전에,

프로그램이 돌아가는 원리를 이해하는 순서로 정리

 

Program이란 무엇일까?

-"작업을 위해서 실행할 수 있는 파일(Application이라고 표현한다)"

 

 

그 프로그램에는 수많은 바이너리 파일들이 존재하는데, 어떻게 실제로 실행이 되게 할까?

-그 파일들의 실행을 담당하게 되는 게 Process이고, Process는 해당 프로그램을 실행합니다.

정리하면, Process는 "실행되고 있는 컴퓨터 프로그램"을 말합니다.

 

일단 컴퓨터의 두뇌역할을 하는 Operation System이 있는데, 

Operation System이 실행 가능한 파일을 메모리에 올린 다음에 이것을 이제 Process로 실행을 시킵니다

 

*Process의 구성요소를 살펴보면,

Register, Counter, Stack

             Heap

             Code

로 이루어져있다.

 

우선 Register는 cpu에서 명령들을 들고(대기) 있거나 주소 같은 것을 들고 있는 Cpu하나의 부분을 말합니다.

 

다음 카운터는 프로그램 안에서 현재 어느 위치를 실행시키고 있는지 가르키는 용도로 쓰입니다.

 

스택같은 거는 우리가 function call을 하면 이제 call stack이라는 게 쌓이는 데

예를 들어 Main function에서 Count function을 호출했다 치면은 한단계 들어가게 된다

call stack에서 발생하게 되고 Local variable들이 저장이 되고,

Heap 같은 경우에는 이제 프로세스가 가지고 메모리들 중에 위쪽에 할당이 되는데

동적으로 할당가능한 메모리이구 메모리 Size제한이 없습니다.

 

코드같은 경우에는우리가 실행하는 코드들을 의미한다.

 

이런것들이 들어있는 것이 바로 프로세스구, 이 프로세스를 가주고 실행에 다닌다.

하나의 어플리케이션을 실행하면 최소한 하나의 프로세스가 뜨게 됩니다.

 

Process와 Thread는 어떻게 다른 것일까?

자, Process는 여러개의 Thread를 가질 수 있습니다

Thread라는 게 "프로세스의 실행 단위"를 의미한다.

그래서 Thread가 여러개 생길 수 있습니다.

 

Process의 실행과정을 자세히 들여다보면,

Process안에서 여러 개의 Thread가 자원을 공유하면서 동시에 진행이 되는데

여기서, 동시성(Concurrency)과 병렬(parallelism)은 다르다.

눈에 보기에는 동시에 진행되지만 저 cpu의 자원을 나눠서 쓰는 거기 떄문에 그렇다

 

더 깊이 보면

각각의 쓰레드 안에는 하나의 스택을 갖게 된다. 스택을 콜스택 같은 거나 로컬 벨러블 이런것들이 하나씩 같고 있는데

공유를 한다.

 

Process vs Thread

-가장 큰 차이는 Time이다.

-Thread는 적은 시간, 적은 자원, 메모리를 공유, 전환할 때도 soft하게 전환이 된다(Process처럼 운영 체제를 호출하여 전환하는 것이 아니라)

 

 

 

//추가적으로 알게 된 GIL concepts에 대해서 알아보겠습니다.

 

*Global Interpreter Lock(Python GIL)

 

-인터프리터 수준의 잠금이다.

Python인터프리터에서 한 번에 여러 스레드를 실행하지 못하게 하는 것.

실행하려는 각 스레드는 다른 스레드에서 GIL이 해제 될 때까지 기다려야 함.

 

다중 쓰레드 Python응용프로그램은 실제로 단일 쓰레드이다.

GIL은 여러 쓰레드가 파이썬 객체에 동시에 액세스하는 것을 방지한다.

 

 

 

'SW 기술 정리' 카테고리의 다른 글

[자료구조]Stack, Queue, Deque  (0) 2021.02.21
Python3 와 PyPy3 차이  (1) 2021.01.20

댓글