[c++] C++에서의 스레드 풀 및 작업 스케줄링
C++로 멀티스레드 애플리케이션을 개발할 때, 스레드 풀을 사용하면 작업의 효율적인 분배와 관리를 할 수 있습니다. 여기에서는 C++에서 스레드 풀을 생성하고 작업을 스케줄링하는 방법에 대해 알아볼 것입니다.
스레드 풀 생성
C++에서는 스레드 풀을 생성하기 위해
#include <iostream>
#include <thread>
#include <vector>
void workerFunction(int taskId) {
std::cout << "Task " << taskId << " is being processed" << std::endl;
}
int main() {
int numThreads = std::thread::hardware_concurrency();
std::vector<std::thread> threadPool;
for (int i = 0; i < numThreads; ++i) {
threadPool.push_back(std::thread(workerFunction, i));
}
for (auto& thread : threadPool) {
thread.join();
}
return 0;
}
위의 예제에서 std::thread::hardware_concurrency()
를 사용하여 시스템에서 지원하는 스레드 수를 얻어와 스레드 풀을 생성하고 있습니다.
작업 스케줄링
C++에서는 std::async
및 std::future
를 사용하여 작업을 스케줄링할 수 있습니다. 예를 들어, 다음과 같이 작업을 스케줄링할 수 있습니다.
#include <iostream>
#include <future>
int taskFunction() {
return 42;
}
int main() {
std::future<int> result = std::async(taskFunction);
std::cout << "Result: " << result.get() << std::endl;
return 0;
}
위의 예제에서 std::async
함수를 사용하여 taskFunction
을 비동기로 실행하고 결과를 std::future
객체로 얻어온 후 출력하고 있습니다.
결론
C++에서는 스레드 풀을 생성하고 작업을 스케줄링하기 위해 다양한 도구들을 제공합니다. 이를 통해 멀티스레드로 동작하는 애플리케이션을 효율적으로 개발할 수 있습니다.
참고문헌: cppreference.com