[전산공부] 프로세스 vs 쓰레드

2020. 2. 23. 00:18프로그래밍-Science/운영체제

워낙 자주나오는 비교대상들이기도 하고

노드 공부하다가 코어 여러개 사용하는 코드 알려주길래 

막간을 이용하여 정리!

 

 

프로세스란?

 

- 컴퓨터에서 연속적으로 실행되고 있는 프로그램

- 메모리에 올라와 실행되고 있는 독립적 개체(인스턴스라고도 한다!)

- 동적으로는 실행된 프로그램을 의미한다

 

그럼 쓰레드는?

 

- 프로세스내에서 실행되는 여러 흐름의 단위고

- 프로세스가 할당받을 자원을 이용하는 '실행'의 단위

 

그림으로 보면 이렇다

 

좌측그림기준으로 설명해보자면

어떤 운영체제는 여러가지 프로세스를 수행할 수 있고, 

수행과정에서 각각 독립된 메모리 영역을 부여받는데

이를 Code, Data, Stack, Heap이라고 한다.

 

- Code: 코드 자체를 구성하는 영역, 쉽게 말해 바이너리 파일 메모리 같은 것들이다. 기계어로 제어된다

- Data: 우리가 코딩할 때 다루는 자료들. global한 변수나 array, structure들이 포함. 특이한 부분은 BSS(Block Stated Symbol)라는 영역을 따로 가지고 있어, 초기화되지 않은 데이터만 이곳에서 다룬다.

- Heap: 동적으로 메모리를 할당하는 부분. 정확히는 동적 데이터 영역이다. 메모리 주소 값에 의해서만 사용된다. C++기준으로 new()함수

- Stack: 임시 메모리 영역. local 변수나 parameter, 리턴값 등이 사용되는데, 얘를 사용하는 함수가 끝나면 다시 시스템에 반환된다. <----- 쓰레드는 이놈만 할당받는다!!!

 

 

좀 더 구체화 하자면 저렇다. 

스택은 저 중 딱 main 함수가 실행될때 생성되고, 그 외 인프라적인 부분은 Data에서 담당한다. 

 

우측그림기준,

쓰레드는 Stack만 각각 부여받고, Code, Data, Heap은 공유한다

보통 프로세스 하나 당 쓰레드 하나가 주어진다.

 

그럼 자주 등장하는 비교 항목,

멀티 프로세스 vs 멀티 쓰레드 차이는?

 

 

멀티 프로세싱은 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 작업하는 것이다. 

그러니까 각각의 프로세스는 전부 Code, Data, Stack, Heap의 고유 영역을 부여받는다.

 

서두에 언급한 '코어'는 CPU의 물리적인 단위와 비슷하다

정확히 말하자면, CPU안에서 일하는 부품의 단위이다.

1개면 싱글코어, 2개면 듀얼코어, 3개면 트리플 코어 등등

그렇다면 멀티 프로세싱을 하드웨어 관점에서 본다면

한개의 컴퓨터에 여러개의 CPU(또는 CPU속의 멀티코어)를 장착하고 프로세스를 여러개 벌리는 행위가 되겠다.

 

하지만 멀티 쓰레드는 스택만 분리되어 있다.

사실 그래서 쓰레드의 활용도가 더 높은 편이다.

기본적으로 전역변수를 포함한 다양한 자원들이 공유할 수 있기 때문이다. 

또한 스위칭하는 시간도 덜 소모된다.