Thread 란?
프로세스 내에서 독립적인 실행 흐름을 갖는 작은 실행 단위이다. 일반적으로 한 프로그램은 하나의 스레드를 가지지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 이것을 멀티스레드라고 한다. 멀티 스레드를 사용하게 될 경우 병렬 처리로써 여러 작업을 동시에 수행하므로 전체적인 처리 속도를 높일 수 있고, 하나의 스레드가 중단되거나 멈춰도 다른 스레드가 계속해서 실행되므로 응답성이 향상될 수 있지만, 스레드간 동기화도 해줘야하고 작업하고자 하는 양이 적으면 스레드를 생성하는데 소요되는 시간이 더 커서 오버헤드가 발생하는 등의 단점도 있다.
Thread 구현 방법
피보나치 수열의 계산을 예시로 들었고, 메인 함수에서 x 값을 조정해 하나의 스레드와, 두개의 스레드간 시간이 얼마나 소요되는지 비교할 수 있게끔 코드를 구현했습니다. 두 개의 result 결과 중 위의 결과가 하나의 스레드를 사용한 코드이고, 아래의 result 값이 두개의 스레드로 구현한 코드입니다.
피보나치 수열 25까지의 계산 결과
피보나치 수열 45까지의 계산 결과
Thread 구현 코드
#include<iostream>
#include<thread>
#include<ctime>
typedef long long LL;
LL fibo1(int x) {
if (x <= 2) {
return 1;
}
return fibo1(x - 1) + fibo1(x - 2);
}
LL fibo2(int x, LL* result) {
if (x <= 2) {
*result = 1;
return *result;
}
*result = fibo1(x - 1) + fibo1(x - 2);
return *result;
}
int main() {
clock_t start, end;
LL result;
int x = 25;
// 멀티 쓰레드 사용 X
start = clock();
result = fibo1(x);
end = clock();
std::cout << "result : " << result << ", time : " << (double)(end - start) / CLOCKS_PER_SEC << "초" << std::endl;
// 멀티 쓰레드 사용 O
LL res1, res2;
start = clock();
std::thread f1(fibo2, x - 1, &res1);
std::thread f2(fibo2, x - 2, &res2);
f1.join();
f2.join();
result = res1 + res2;
end = clock();
std::cout << "result : " << result << ", time : " << (double)(end - start) / CLOCKS_PER_SEC << "초" << std::endl;
}
'C++' 카테고리의 다른 글
[MFC] GDI+ 사용하기 (2) | 2023.12.05 |
---|---|
[C++] 힙 개념과 구현 방법 (0) | 2023.11.22 |
[C++] Vector 정의 및 사용법 (2) | 2023.11.21 |
댓글