본문 바로가기

PL/C & C++

[C++] thread, async 차이점

 

 

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