reference: "전문가를 위한 C++" / 마크 그레고리
멀티쓰레드 프로그래밍을 이용하면 시스템에 있는 여러 프로세서 유닛을 병렬(parallel)로 사용하는 프로그램을 작성할 수 있다. 시스템에 프로세서 유닛이 장착되는 방식은 다양한데, 독립적인 CPU를 담은 프로세서 칩이 여러 개 있을 수 있고, 한 프로세서 칩 안에 코어(core)라 부르는 독립적인 CPU가 여러 개 있을 수 있다. 또 어떤 시스템은 두 가지 방식을 혼합하기도 한다. 이렇게 프로세서 유닛이 여러 개 달린 프로세서를 멀티코어 프로세서라 부른다.
멀티쓰레드 애플리케이션은 플랫폼이나 OS에서 제공하는 API에 상당히 의존적이다. 즉 멀티쓰레드 프로그래밍 코드를 플랫폼 독립적으로 작성하기는 힘들다. C++11부터 제공되는 표준 쓰레딩 라이브러리 <thread>
를 활용하면 이러한 문제를 어느정도 해결할 수 있다.
C++98/03 버전은 멀티쓰레드 프로그래밍을 지원하지 않았다. 써드파티 라이브러리나 타깃 시스템의 OS에서 제공하는 멀티쓰레드 API(시스템 콜)을 활용할 수 밖에 없었다. C++11부터 표준 멀티쓰레드 라이브러리가 추가되면서 '크로스 플랫폼' 멀티쓰레드 프로그램을 작성하기 쉬워졌다.
source: https://velog.io/@yeunjoo121/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-thread
멀티쓰레드 프로그래밍이 필요한 이유는 크게 두 가지이다.
병렬 연산
ex) Map-Reduce
주어진 연산 작업을 작은 문제들로 나눠서 각각을 멀티프로세서 시스템에서 병렬로 실행하면 전반적인 성능을 크게 높일 수 있다.
모듈화
연산을 다른 관점에서 모듈화할 수 있다. 예를 들어 연산을 UI 쓰레드에 종속적이지 않은 독립 쓰레드로 분리해서 구현하면 처리 시간이 긴 연산을 백그라운드로 실행시키는 방식으로 UI의 응답 속도를 높일 수 있다.