Async란?
"async"는 "비동기"를 의미하는 용어입니다. "async"는 "asynchronous"의 약어로, 동기적인 작업 흐름과 달리 비동기적인 작업 흐름을 의미합니다.
동기적인 작업은 순차적으로 진행되며, 한 작업이 끝나야 다음 작업을 수행할 수 있습니다. 작업이 완료될 때까지 다른 작업을 기다려야 하는 특징이 있습니다. 이에 비해 비동기적인 작업은 작업을 시작한 후, 완료를 기다리지 않고 다른 작업을 수행할 수 있습니다. 비동기적인 작업은 백그라운드에서 동시에 실행되며, 작업이 완료되면 그 결과를 반환하거나 콜백 함수를 호출하여 결과를 처리합니다.
비동기 작업은 주로 네트워크 요청, 파일 입출력, 데이터베이스 액세스와 같이 시간이 오래 걸리는 작업을 수행할 때 유용합니다. 동기적인 작업은 작업이 완료될 때까지 다른 작업을 수행할 수 없기 때문에, 긴 작업이 완료될 때까지 프로그램이 블로킹되는 현상이 발생할 수 있습니다. 이러한 문제를 해결하기 위해 비동기 작업을 사용하여 프로그램의 응답성과 성능을 향상시킬 수 있습니다.
C++ 프로그램 예제
C++에서 비동기적으로 동작하려면 일반적으로 비동기 작업을 처리하는 스레드를 생성하거나 비동기 작업을 처리하는 라이브러리를 사용해야 합니다.
C++에는 여러 가지 비동기 처리 방법이 있지만, C++11부터 도입된 std::async와 std::future를 사용하여 비동기 작업을 처리하는 방법을 설명하겠습니다.
아래의 예시 코드에서는 std::async와 std::future를 사용하여 비동기적으로 작업을 수행하는 방법을 보여줍니다:
Sample.cpp 코드
아래는 sample.cpp 입니다.
#include <iostream>
#include <future>
#include <chrono>
// 비동기 작업을 수행하는 함수
std::string performAsyncTask()
{
std::cout << "Async task doing" << std::endl;
return "Async task result";
}
int main()
{
// 비동기 작업 시작
std::future<std::string> futureResult = std::async(std::launch::async, performAsyncTask);
// 메인 스레드에서 다른 작업 수행
std::cout << "Performing other tasks..." << std::endl;
// 비동기 작업 결과 대기 및 출력
std::string result = futureResult.get();
std::cout << "Async task result: " << result << std::endl;
return 0;
}
performAsyncTask() 함수에 아래 내용을 더해주면 더 확실한 비동기 테스트를 할 수 있습니다.
2초 뒤에 더 추가한 task든 cout이든 동작할 것입니다.
std::this_thread::sleep_for(std::chrono::seconds(2)); // 비동기 작업 시뮬레이션
컴파일 방법
컴파일 방법은 c++ 11을 기반으로 pthread를 추가해야합니다.
컴파일 예제
g++ -std=c++11 -o output test.cpp -lpthread
standard c++11이라는 의미와 pthread library를 사용한다는 의미로 g++ 컴파일러를 사용했습니다.
이제 실행을 해보면 아래와 같이 나옵니다.
./output
Performing other tasks...
Async task doing
Async task result: Async task result
간단한 예제 프로그램이니 이걸 기반으로 더 좋은 async 프로그램을 만들어봅시다.
'다양한 TIP' 카테고리의 다른 글
c++ 맹글러 해석방법 알아보기 (0) | 2023.07.26 |
---|---|
Wireshark 설치방법 및 다양한 기능종류 (0) | 2023.07.02 |
bmt에 많이 사용하는 burp suite 설치해보기(feat. 주요기능들 설명) (0) | 2023.06.30 |
댓글