Modern C++/Task 기반 비동기 프로그래밍
-
packaged_task를 이용한 스레드 풀 구현 2Modern C++/Task 기반 비동기 프로그래밍 2020. 8. 28. 22:58
이전 장에 std::async 와 동일한 작업을 수행하는 함수를 구현해 보았다. 이제는 스레드에서 호출되는 람다를 queue에 저장하는 코드를 구현해 보자 2. queue 에 task 푸시 #include #include #include #include //람다 저장용 task_queue std::queue task_queue; #include template std::future async(Func&& func, Args... args) { using Result = std::result_of_t; //task 객체가 현재 범위를 벋어나면 사용 할 수 없으므로 동적으로 할당 auto task = new std::packaged_task( std::bind(std::forward(func), std::f..
-
packaged_task를 이용한 스레드 풀 구현 1Modern C++/Task 기반 비동기 프로그래밍 2020. 8. 28. 05:54
이전 장에서 std::async 함수를 통해서 비동기 태스크를 생성하는 방법과 내부에서 std::promise 와 std::future 객체를 통해서 스레드에서 어떻게 future 객체에 결과를 전달했는 지를 살펴 보았다. C++ 은 std::async 이외에도 packaged_task를 지원해 해당 태스크를 다른 스레드에 전달해 이를 수행할 수 있다. #include #include #include int add(int a, int b) { std::cout
-
왜 Task 기반의 비동기 프로그래밍인가?Modern C++/Task 기반 비동기 프로그래밍 2020. 8. 27. 21:18
개발을 시작할 때만 해도 C++에서 스레드를 지원하지 않아 이를 직접 개발해서 사용해 왔다. C++ 11 이 후에 스레드가 표준 라이브러리로 추가되었다. 하지만 C++ 도 자바나 Swift, Kotolin과 같이 스레드를 태스크 내부에 숨기고 태스크를 이용해 많은 부분 개발이 된다. 개발자는 더 이상 하드웨어 내 코어의 수에 따라 스레드를 관리하거나 스레드 풀을 구현하고 스레드가 데이터의 관리등을 위해 동기화 처리 문제등에서 조금은 벗어 날 수 있다. C++ 에서 비동기 프로그래밍을 위해서 스레드나 task를 사용한다는 사실은 ModernC++ 을 사용하는 사람은 대부분 알 수 있다. #include #include #include int main() { std::thread t([]() { for (s..