본문 바로가기

운영체제

[CPU의 프로세스와 스레드 차이] 코어는 몇 개? 스레드가 몇 개?무슨 차이가 있을까

먼저 프로세스쓰레드의 사전적 정의는 무엇일까?

 

프로세스: 컴퓨터 분야에서 무엇인가를 처리, 가공하는 기능을 가진 하드웨어, 소프트웨어로
대표적으로 CPU가 있다.                                                 (출처 : 사이언스올 과학사전)

 

스레드(thread) : 다중 작업 환경에서 운영 체제가 여러 프로그램을 병행하여 처리할 때 효율적인 처리를 위하여 분할한 처리 단위 (출처 :네이버 사전)

 

네이버를 검색하면 위와 같이 검색 결과가 나온다.

 

흠 대충 둘 다 무언가 처리하는 단위인 거 같긴 한데 당최 뭐가 다른지 알 수 없다.

 

특히 스레드는 다른 말로 논리 프로세서라고도 하던데

 

프로세스를 진행하는 프로세서를 병렬 처리를 위해 논리적으로 구성한 건가? 하는 피상적인 이해만 갔었는데..

 


운영체제 수업을 들으며 나름대로 그 전보다는 프로세서 (주로 cpu의 코어)와 스레드의 차이를 개념적으로

 

알 거 같아서 본인이 이해한 개념으로 정리한다.

 

일단 운영체제 과목 상에서 다루는 프로세스는 위의 의미보다는 소프트웨어적인 의미가 강하다.

윈도우 유저라면 ctrl+Alt+Del에서 볼 수 있는 작업관리자를 띄워보면 이 곳에 프로세스가 있다.

 

이러한 프로세스들이 운영체제에서 주로 말하는 프로세스가 된다고 보면 된다.

 

따라서 프로세스는 컴퓨터 상에 실행되는 or 실행 될 여지가 있는 프로그램들이라고 대략적인 이해를 할 수 있다.

 

프로세서 (여기선 CPU라고 해보자) 에 의해 프로세스는 작업에 필요한 자원 (메모리라고 이해해보자)을 받아야 작업을 진행할 수 있다. 하나의 제어 흐름으로 메모리를 할당받아서 작업을 하게 되는게 원래 프로세스인데 병렬 처리를 해서 작업 성능을 높이기 위해서 한 프로세스 안에서 실행점을 나누어 다중 처리를 하기 위해 스레드(thread)가 도입되었다고 한다.

출처-방통대 운영체제(김진욱) ppt

하나의 프로그램 실행을 다중 처리하기 위해서 무작정 프로세스를 늘리기에는 프로세스는 메모리 할당을 매번 받아야하는 비효율성이 있으므로 한 번 자원을 할당받아 하나의 프로세스를 만들면 그 안에서 [1~20번 영역 처리, 21~50번 처리, 51~100번 처리] 하는 식이나 [입력출력 담당, 연산 담당]하는 식으로 분업을 할 수 있게 실행점을 나누어 다중처리한다.  여기서 이런 저런 컴퓨터 속 실제 동작은 집어치우고 우리가 상상할 수 있는 공장의 모습을 떠올려보자.

 

 

프로세스는 어떤 제품을 생산하는 공장 라인이라고 떠올려보자. 

출처-내가 그린 그림;

공장 라인 1(프로세스1)에서는 스마일 인형을 만들고

라인 2(프로세스2)에서는 그림과 같이 (;;) 별강아지 인형을 만든다고 하자.

현재는 라인당 한명의 사람(실행점)이 인형을 처음부터 끝까지 다 만들어서 만들고 있다.

이때 생산을 더 빠르게 하고 싶으면 빨리 생산하고 싶은 인형의 라인을 늘리거나

사람을 늘려 [머리와 몸통 붙이는 사람, 몸통과 팔 다리 붙이는 사람] 이런식으로 분업을 하면 될 것이다.

 

라인별로 어떤 일을 하기로 했으면 받아야하는 재료가 있기 때문에

라인을 늘려서 인형에 맞는 재료를 분배하고 가져다주고 하는데에 시간을 보내는 것보다

공정 과정에 사람을 추가해 실행점을 나누는게 더 간편하고 한 라인안에서 소통도 편하다. 

 

이처럼 프로세스를 늘려서 다중처리하는건 새로운 프로세스에 재료(메모리)를 세팅해줘야 되기 때문에

스레드를 나누어 실행점을 추가하는게 효율적일때가 있다는 것이다. 

 

CPU의 코어와 프로세서에 이를 대입해 생각해보자면,

CPU에서 코어를 추가하면 작업대가 더 생겨서 여러가지 작업을 더 올려놓을 수 있기 때문에 속도가 빨라질 것이다.

또한 스레드 갯수가 많으면 작업을 공유하는 일손이 더 많아져서 실행점을 나누어 처리할 수 있어서 이 역시 성능에 영향을 줄 것이다. 

 

그러나 병렬처리할 작업의 갯수가 많아지지거나 스레드간의 일을 불균형하게 배분하면

한 프로세스안에 속한 스레드간에는 데이터를 공유하기에 아예 다른 프로세스를 돌릴 수는 없어서

스레드만으로 성능을 올리는데에는 한계가 있고,역시 공장의 라인(코어) 자체가 많아야

근본적으로 속도가 올라갈 것이다.