[c++] 함수의 병행성과 병렬성

병행성(concurrency)과 병렬성(parallelism)은 모두 동시에 여러 작업을 수행하는 것과 관련이 있지만, 그 개념과 적용 방법에는 차이가 있습니다. C++ 언어에서 이러한 개념들을 어떻게 활용할 수 있는지 알아보겠습니다.

병행성과 병렬성의 개념

병행성 (Concurrency)

병행성은 동시에 여러 작업을 처리하는 개념입니다. 여러 작업을 번갈아가며 조금씩 처리하여 동시에 진행하는 것처럼 보이게 합니다. 이를 통해 작업들 간에 시간을 효율적으로 분배할 수 있습니다. C++에서는 std::threadstd::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::threadOpenMP를 사용하여 구현할 수 있습니다. 하지만 병렬성이 병행성에 비해 더 어려운 개념이기 때문에 주의해서 사용해야 합니다.

요약

병행성과 병렬성은 모두 동시에 여러 작업을 처리하는 개념이지만, 그 방법과 목적은 서로 다릅니다. C++에서는 std::thread, std::async, std::mutex 등을 활용하여 병행성을 구현할 수 있으며, 병렬성은 std::threadOpenMP를 사용하여 구현할 수 있습니다. 이러한 기능을 적절히 활용하여 프로그램의 성능을 최적화하는 것이 중요합니다.

이러한 병행성과 병렬성은 멀티코어 프로세서 등을 활용하여 프로그램의 성능을 최적화할 때 유용하게 사용될 수 있습니다.

참고 자료