반응형
References
std::async
- 함수만 전달하면 Thread를 알아서 만들어서 함수를 비동기적으로 실행하고 std::future을 return 한다.
- async에 어떠한 방식으로 수행될 것인지 정책을 전달 할 수 있다.
- std::launch::async
- 바로 쓰레드를 생성해서 인자로 전달도니 함수를 실행한다.(비동기적 수행) - std::launch::deferred
- future의 get 함수가 호출되었을 때 실행한다. (새로운 쓰레드를 생성하지 않음.) (동기적 수행) - policy를 설정하지 않으면 어느 정책이 실행되는지 알수 없음
- std::launch::async
Policy별 수행.
#include <iostream>
#include <future>
#include <thread>
#include <chrono>
#include <string>
void Excute(std::string str)
{
std::cout << "lanuch::async start " << str << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(3));
std::cout << "lanuch::async end " << str << std::endl;
}
int main()
{
auto asy = std::async(std::launch::async, Excute, "async");
auto def = std::async(std::launch::deferred, Excute, "deferred");
}
결과화면
get이 없기 때문에 deferred가 수행되지 않음을 알 수 있다.
def.get() 추가 실행
int main()
{
auto asy = std::async(std::launch::async, Excute, "async");
auto def = std::async(std::launch::deferred, Excute, "deferred");
def.get();
}
결과화면
get() 호출이 되어야 def 가 실행된것을 볼수 있다.
std::thread 스레드 기반 비동기적 실행
-> 스레드를 통해 어떤 일을 겪게 될지 알수 없음. 병렬처리로 어떤 값을 받게될지 알 수 없음.
std::async 작업 기반 비동기적 실행
-> 미래에 어떤 값을 받아낼 것인가에 더 관심. 병렬 처리 간에 값을 주고 받기가 쉬움. 스레드의 결과를 리턴으로 받는다.
반응형
'프로그래밍언어 > C++' 카테고리의 다른 글
[C++]람다 표현식, lambda 사용법 (0) | 2022.04.11 |
---|---|
[C++]STL map 정리 (0) | 2021.10.08 |
[C++] 숫자, 알파벳 구별함수(isalnum, isdigit, isalpha) (0) | 2021.09.08 |
[c++] 문자열 형 변환, char * <-> std::string <->CString (0) | 2021.06.21 |
[c++] typedef 란? 사용법 (0) | 2021.04.19 |
댓글