C++는 다양한 유형의 애플리케이션, 특히 더 복잡하게 작동하거나 시스템 리소스에 대한 요구 사항이 높은 애플리케이션에서 널리 사용되는 인기 있는 프로그래밍 언어입니다. 따라서 최근 몇 년 동안 C++ 개발에서 비동기 프로그래밍 기술이 점점 더 중요해졌습니다. 이 기사에서는 비동기 프로그래밍에 C++를 사용하는 방법을 살펴보겠습니다.
비동기 프로그래밍 배경
일부 지루하고 시간이 많이 걸리는 작업의 경우 동기 프로그래밍 모델은 요구 사항을 충족할 수 없습니다. 운영 체제는 시스템 리소스를 보다 효율적으로 사용하기 위해 이러한 작업을 비동기 모드로 설정하는 경우가 많습니다. 비동기 프로그래밍 모델을 사용하면 프로그램은 이전 작업이 완료될 때까지 기다리지 않고 여러 작업을 병렬로 실행할 수 있습니다. 이는 프로그램의 전반적인 성능을 향상시키는 데 도움이 됩니다.
비동기 프로그래밍 팁
C++로 비동기 프로그래밍을 할 때는 비동기 라이브러리를 사용해야 합니다. 그 중 C++11 표준에는 메인 스레드가 아닌 다른 스레드에서 함수를 실행할 수 있는 비동기 라이브러리인 std::async가 포함되어 있습니다. std::async 함수를 사용하는 구체적인 과정은 다음과 같습니다:
1. 비동기 작업 생성: std::future 객체.
2. 비동기 작업에서 함수를 실행하려면 std::async 함수를 사용하여 함수와 매개변수를 지정하세요.
3. 메인 스레드에서 다른 작업을 실행하고 결과를 얻기 전에 비동기 작업이 완료될 때까지 기다립니다.
다음은 샘플 코드입니다.
//헤더 파일 포함
//비동기 작업
int foo(int x) {
return x * x;
}
//Main function
int main() {
//创建异步任务 std::future<int> result = std::async(foo,2); //在此期间执行其他任务 std::cout << "Main Task Finished" << std::endl; //等待异步任务完成 int r = result.get(); //输出异步任务结果 std::cout << "Result is " << r << std::endl;
}
메인 스레드에서 비동기 작업이 완료되기를 기다릴 때 메인 스레드가 차단된다는 점에 유의할 가치가 있습니다. 따라서 std::future_status 열거 유형 중 하나, 즉 std::future_status::ready를 사용하여 다음과 같이 비동기 작업이 완료되었는지 여부를 감지할 수 있습니다.
//비동기 작업이 완료되었는지 감지
if ( result.wait_for(std::chrono::seconds(0)) == std::future_status::ready) {
//异步任务已完成
}
또한 std::promise와 std::future를 함께 사용할 수도 있습니다. 보다 세분화된 비동기 프로그래밍 요구 사항을 충족합니다. 예를 들어 다중 스레드 프로그래밍에서는 다른 작업을 수행하기 전에 하나의 스레드가 완료될 때까지 기다려야 할 수 있습니다. 이때 std::promise 및 std::future를 사용하여 세마포 메커니즘을 구현할 수 있습니다.
// 헤더 파일 포함
//비동기 작업
void foo(std::promise
std::this_thread::sleep_for(std::chrono::seconds(2)); //模拟长时间的任务 p.set_value(); //使用set_value()将结果返回给主线程
}
//Main function
int main() {
//创建promise对象 std::promise<void> p; //获取future对象 std::future<void> f = p.get_future(); //在单独的线程中运行异步任务 std::thread t(foo, std::ref(p)); //在此期间执行其他任务 std::cout << "Main Task Started" << std::endl; //等待异步任务完成 f.wait(); //输出结果 std::cout << "Main Task Finished" << std::endl; //等待异步线程完成 t.join();
}
이 예에서는 std::promise를 사용하여 비동기 스레드에 세마포 값(즉, void)을 전송합니다. 비동기 스레드가 작업을 완료하면 set_value() 함수를 사용하여 세마포어 값을 메인 스레드에 반환합니다. 기본 스레드는 실행을 계속하려면 비동기 스레드가 완료될 때까지 기다려야 합니다.
요약
비동기 프로그래밍은 C++ 프로그래밍에서 중요한 기술로, 프로그램의 전반적인 성능과 동시성을 향상시킬 수 있습니다. 이 기사에서는 C++ 비동기 프로그래밍의 기본 원칙을 소개하고 몇 가지 관련 예제 코드를 보여줍니다. 프로그램 성능을 향상시키거나 멀티스레드 프로그래밍이 필요한 경우 비동기 프로그래밍 기술은 숙달해야 할 핵심 기술 중 하나입니다.
위 내용은 C++의 비동기 프로그래밍 기술의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!