루리코딩 세상

스레드(Thread) 정리해보기 본문

이론/C++

스레드(Thread) 정리해보기

루리딩 2025. 5. 23. 09:09

컴퓨터의 HDD 혹은 SDD에 저장 되어있는 패키징? 빌드? 되어있는 프로그램을 실행할 때에 저장된 데이터 값이 RAM에 프로세스로 할당되어 CPU는 코드를 해석해 정상적으로 작동되는 일련의 과정은 어느 정도 이해가 되었다. 컴퓨터는 한 번에 한가지만 처리한다고 보통 이야기 하지만, 최근 상용되는 CPU들은 멀티 코어를 지원하는 환경에 있다.
아마 여기에서 파생되어온 개념이 스레드라고 생각된다. 이러한 추론이 옳은 추론인지 아닌지 스레드를 정리하면서 정보를 찾아보려한다. 레퍼런스들은 인터넷에 있는 자료들과 도서에서 얻어지는 것을 기반으로 하려한다.
 


백과사전에서 설명하는 스레드(thread)는 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다고한다.
일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행 할 수 있다.
이러한 실행 방식을 멀티스레드(multithread)라고 한다. 로 정의하고 있다.
 
우리가 사용하는 PC의 CPU는 한 번에 한가지 연산 밖에 할 수 없는데, 동시에 여러가지 일을 하는 사용자 입장에서는 내부적인 연산처리 과정을 들여다 보지 않으면 쓰레드를 이해하기에는 다소 생소할 수 있겠다. 이럴때 CPU는 프로그램이 한번에 작동하는 곳이 아닌, 코어 하나를 기준으로 차례대로 순서를 나누어 실행시키는 것을 컨텍스트 스위칭(Context Switching) 이라는 기술에 숨어있다..

이는 운영체제에서 주는 명령을 cpu에서 처리하는 과정을 실행하는 것에만 사용할 뿐, 나머지의 순서는 운영체제의 스케줄러(scheduler)가 알아서 결정하게 되는 것을 볼 수 있다.
프로그램에 따라 최소 1개의 쓰레드로 구성된 것을 여러개의 쓰레드로 작성하여 구성하게 된다면
이는 멀티 쓰레드(multihread) 프로그램이라 한다.

프로세스와 쓰레드의 가장 큰 차이점은 프로세스는 서로의 메모리를 공유하지 않는다
즉 같은 주소값이 아니기에 각 프로세스끼리는 메모리값에 접근 할 수 없다.

하지만 쓰레드는 프로세스와 다르게 서로같은 메모리를 공유하면서 각각의 쓰레드 변수 값에 접근이 가능한 곳이다.
}‘/‘
C++에서 스레드 입력하는 방식은 다음 예제를 보면서 파악해보고자 한다..

// 모두의 코드 예제를 사용해서 작성해보고자 한다.
for (i+1; i<10000; i++) {sum += i;}

//Thread #1
for (i =	1; 1<=10; i++) {sum += sum[i]}

// 모든 쓰레드 실행이 끝난 후
for (i=1; i < 10; i++) {sum += sum[i]}

//Thread #2
for (i=1001; i <= 2000; i++) {sum[2] += i;}

//Thread #3
for (i=2001; i <= 3000; i++) {sum[3] += i;}



- 쓰레드는 리턴값이 없다. 각 인자별로 detach 로 초기화하여 백그라운드로 돌아가게 해준다.
- 몬스터 만들어서 맵에서 생성될 때 사용하면 좋겠다.

'이론 > C++' 카테고리의 다른 글

"scanf" 찾아보기  (0) 2025.05.28
Pointer : * 포인터 연산자  (1) 2025.05.24
C++ 람다 함수(Lambda)  (0) 2025.05.22
함수(Parameter)와 인수(Argument)의 차이와 용어 구분  (0) 2025.05.22
스택 프레임 (Stack frame)  (0) 2025.05.14