병행성(concurrency)과 병렬성(parallelism)은 모두 동시에 여러 작업을 수행하는 것과 관련이 있지만, 그 개념과 적용 방법에는 차이가 있습니다. C++ 언어에서 이러한 개념들을 어떻게 활용할 수 있는지 알아보겠습니다.
병행성과 병렬성의 개념
병행성 (Concurrency)
병행성은 동시에 여러 작업을 처리하는 개념입니다. 여러 작업을 번갈아가며 조금씩 처리하여 동시에 진행하는 것처럼 보이게 합니다. 이를 통해 작업들 간에 시간을 효율적으로 분배할 수 있습니다. C++에서는 std::thread
나 std::async
를 사용하여 병행성을 구현할 수 있습니다.
병렬성 (Parallelism)
병렬성은 실제로 작업들을 동시에 처리하는 개념입니다. 병렬성은 멀티코어 프로세서와 같은 병렬 처리 장치를 활용하여 작업을 동시에 처리함으로써 성능을 향상시킵니다. C++에서는 std::thread
를 사용하여 직접적으로 스레드를 만들거나, OpenMP
라이브러리를 사용하여 병렬성을 구현할 수 있습니다.
C++에서의 병행성과 병렬성
C++에서는 std::thread
, std::async
, std::mutex
등을 이용하여 병행성을 구현할 수 있습니다. 또한 C++11에서부터는 멀티스레드 프로그래밍을 보다 쉽게 할 수 있는 도구들이 추가되었습니다.
#include <iostream>
#include <thread>
void hello() {
std::cout << "Hello from thread " << std::this_thread::get_id() << std::endl;
}
int main() {
std::thread t1(hello);
std::thread t2(hello);
t1.join();
t2.join();
}
위 예제는 std::thread
를 사용하여 두 개의 스레드를 생성하고 병행적으로 실행하는 간단한 예시입니다.
병렬성은 앞서 말한 것처럼 std::thread
나 OpenMP
를 사용하여 구현할 수 있습니다. 하지만 병렬성이 병행성에 비해 더 어려운 개념이기 때문에 주의해서 사용해야 합니다.
요약
병행성과 병렬성은 모두 동시에 여러 작업을 처리하는 개념이지만, 그 방법과 목적은 서로 다릅니다. C++에서는 std::thread
, std::async
, std::mutex
등을 활용하여 병행성을 구현할 수 있으며, 병렬성은 std::thread
나 OpenMP
를 사용하여 구현할 수 있습니다. 이러한 기능을 적절히 활용하여 프로그램의 성능을 최적화하는 것이 중요합니다.
이러한 병행성과 병렬성은 멀티코어 프로세서 등을 활용하여 프로그램의 성능을 최적화할 때 유용하게 사용될 수 있습니다.
참고 자료
- C++ Concurrency in Action - Anthony Williams, Manning Publications, 2012
- The C++ Programming Language - Bjarne Stroustrup, Addison-Wesley Professional, 2013