C++ thread와 async의 차이점
C++에서 병렬처리를 하기위해 여러가지 클래스를 제공합니다. C++에선 std::thread, std::task, std::future, std::async를 제공합니다. 그 중 많이 쓰이는 std::thread와 std::async에 대해 설명해볼까 합니다. 1. C++
hwan-shell.tistory.com
이 둘의 차이점은 내부에 있습니다.
std::thread 클래스는 말 그대로 Thread만 생성해주는 역할을 합니다.
물론 Thread가 종료를 기다리는 .join() 함수같은 기본적인 함수들을 제공하지만
이런것들을 제외하곤 날 것이라고 봐도 무방합니다. 말 그대로 Thread만 생성하니깐요.
반면std::async는 std::task클래스 기반으로 만들어 졌습니다.
물론 객체를 생성할 때 std::future클래스를 기반으로 생성되지만 std::future역시 std::task기반입니다.
std::task는 std::thread클래스에 없는 기능들을 제공합니다.
내부에서 Thread Pool을 만들어 Thread를 관리하게 되며, .then() 함수를 통해 쓰레드를 체인 형식으로 구현할 수 있습니다.
본론으로 돌아와 std::async는 다음과 같은 장점을 가집니다.
1. 내부에서 Thread Pool을 만들어 사용한다.(해당 Thread Pool은 운영체제, 라이브러리마다 생성 방식이 다르다.)
2. std::async는 예외처리가 가능하다. 따라서 프로그램이 중간에 멈추는 현상을 방지할 수 있다.
3. std::async는 return값을 갖는다. 따라서 Thread를 만들 때 해당 함수에 대한 반환값을 얻을 수 있다.
'PL > C & C++' 카테고리의 다른 글
[C++] extern, static (0) | 2023.04.06 |
---|---|
[C++] 암시적 형 변환 (Implicit type conversion) (0) | 2023.04.06 |
[C++] 전처리문 (0) | 2023.04.06 |
[C++] lambda 표현식 (0) | 2023.03.16 |
[C&C++] undefined reference to~ /cpp 파일에서 c 파일 불러오기 (0) | 2022.06.22 |