본문 바로가기
[기술] 이야기

쓰레드(Thread)란 용어를 들어보셨나요? 개발자가 알려주는 쓰레드 이야기

by 헤이나우
반응형

스레드를 알아 볼텐데 스레드는 개발 언어나 OS에 따라서 생성 방법 및 형태가 약간씩 다르다.

여기서는 최대한 개발언어 내용없이 내용을 풀어 보겠습니다.

Thread(쓰레드)를 이해하기 위해서는 Process(프로세스)를 먼저 이해해야 한다.

Process(프로세스)

프로세스는 윈도우에서 프로그램을 가리킨다.

윈도우 프로그램이 실행이 되면 프로세스가 되는것이다.

프로세스는 OS에서 실행할때 프로그램에서 필요한 자원을 할당 받게 되는데,

할당 받는 자원은 사용할 데이터, 메모리, CPU가 될 수 있다.

프로세스는 고정된 자원을 쓰는데(다른 프로세스와 공유X) 이게 쓰레드와 가장 큰 차이점일 것같다.

Thread(쓰레드)

프로세스가 실행하려면 쓰레드가 필요하다. 즉 연산 처리나 백그라운드 데이터 처리, 화면 UI변경 등등 모두 쓰레드가 하는일이다.

프로세스는 최소 하나의 쓰레드가 존재하게 되고 한개 이상의 쓰레드를 필요로하면, 멀티스레드 프로세스 라고 일컷는다.

정리

OS의 프로그램이 있고 이 프로그램을 실행하면 프로세스가 되고 프로세스는 스레드를 통해서 작업을 한다.

스레드

스레드를 예를 들어보자 우리가 게임을 한다고 생각하자

캐릭터가 필트에서 전투를 하고 있다.

상대방 캐릭터가 나에게 채팅을 보낸다.

게임 캐릭터는 전투를 계속 하고 있지만 나는 상대방에게 채팅을 할수 있다.

예에서 보면은

스레드1. 캐릭터 전투를 수행하는 스레드

스레드2. 상대방 캐릭터가 나에게 채팅을 보내는 스레드

스레드3. 내가 상대방에게 채팅을 하는 스레드

이런 작업들을 동시에 할수 있다는건 멀티 스레드가 가능하기 때문에 가능하다.

멀티쓰레드가 없던 시절에는 캐릭터가 전투를 하던 채팅을하던 오직 하나의 작업만 가능했던 것이다.

컴퓨터에서의 스레드

동시성

자 컴퓨터가 코어가 1코어라고 해보자 (코어는 CPU의 머리개수)

그럼 이 컴퓨터는 죽어도 한번에 한개의 프로그램만 실행하고 작업할 수 있다.

하지만 1코어 컴퓨터였을 때도 우리가 윈도우 화면을 여러개 키고 여러 프로그램을 한번에 실행할수 있는 컴퓨터의 꼼수가 있다.

이는 한번에 한번의 작업을 하는데 그 작업을 끝날때 까지 하는게 아니라 번갈아 가면서 처리 하는것이다

쉽게 설명하는 A,B,C 작업 요청이 들어왔을때를 보자.

순차적 진행

A : 100%처리 완료 =>B: 100%처리 완료=>C: 100%처리 완료

아래 그림에서 위에 상황을 gif로 만들어 보았습니다.

 

 

1코어 별렬적 진행

A : 10%처리 완료 => B : 30% 처리완료 => C : 80% 처리완료 => A : 20%처리 완료 => B : 60% 처리완료 => C : 100% 처리완료 => A : 30%처리 완료 => B : 90% 처리완료=> A : 40%처리 완료 => B : 100% 처리완료 => A : 100%처리 완료

이렇게 ABC작업 (태스크)를 별렬적으로 움직이며 작업을 하여 ABC작업이 동시에 처리되는것 처럼 하는것이다.

작업했을때 이점은 빨리 끝나는 작업요청이 나중에 들어와도 같이 처리되기 때문에 오래 기다릴필요가 없는것이다.

그리고 태스크별로 우선순위를 설정할 수 있어 행당작업을 좀더 비중있고, 빠르게 처리할 수 있다.

아래 gif로 좀더 쉽게 이해해보자!!

 

병렬성

그럼 병렬성은 무엇일까?

위에서 동시성은 단일 코어일때 이야기 지만 현재 우리는 다중코어시대에 살고 있다.

보통 코어가 2개 이상이라는 이야기다.

자 동시성과는 다르게 하나의 큰 작업 A가 있다.

코어가 4개가 있는 컴퓨터에서 이 작업을 하나의 코어에서 수행하면 보통 4일이 걸린다고 치면 4일동한 CPU의 하나의 코어만 엄청 바쁘고

나머지 3개의 코어는 아무런 작업을 안하게 되는것이다.

이를 보안하기 위해서 A작업을 a, b, c, d로 쪼개어 하나의 코어에서 작업 a,b,c,d를 나누면 1일이면 이 모든작업이 끝나게 되는것이다.

아래 gif를 통해 좀더 쉽게 이해해 보자

 

이제 쓰레드에 대해서 아셨나요? 쓰레드란 용어는 컴퓨터 CPU제조 과정에서도 쓰이고 보통 프로그램을 실행할때 개발용어이긴 하지만 요즘에는 일반적으로 사용하는 용어가 된거 같습니다.

 

반응형

댓글