>백엔드 개발 >C++ >C++의 비동기 프로그래밍 기술

C++의 비동기 프로그래밍 기술

王林
王林원래의
2023-08-22 16:24:261393검색

C++의 비동기 프로그래밍 기술

C++는 다양한 유형의 애플리케이션, 특히 더 복잡하게 작동하거나 시스템 리소스에 대한 요구 사항이 높은 애플리케이션에서 널리 사용되는 인기 있는 프로그래밍 언어입니다. 따라서 최근 몇 년 동안 C++ 개발에서 비동기 프로그래밍 기술이 점점 더 중요해졌습니다. 이 기사에서는 비동기 프로그래밍에 C++를 사용하는 방법을 살펴보겠습니다.

비동기 프로그래밍 배경

일부 지루하고 시간이 많이 걸리는 작업의 경우 동기 프로그래밍 모델은 요구 사항을 충족할 수 없습니다. 운영 체제는 시스템 리소스를 보다 효율적으로 사용하기 위해 이러한 작업을 비동기 모드로 설정하는 경우가 많습니다. 비동기 프로그래밍 모델을 사용하면 프로그램은 이전 작업이 완료될 때까지 기다리지 않고 여러 작업을 병렬로 실행할 수 있습니다. 이는 프로그램의 전반적인 성능을 향상시키는 데 도움이 됩니다.

비동기 프로그래밍 팁

C++로 비동기 프로그래밍을 할 때는 비동기 라이브러리를 사용해야 합니다. 그 중 C++11 표준에는 메인 스레드가 아닌 다른 스레드에서 함수를 실행할 수 있는 비동기 라이브러리인 std::async가 포함되어 있습니다. std::async 함수를 사용하는 구체적인 과정은 다음과 같습니다:

1. 비동기 작업 생성: std::future 객체.

2. 비동기 작업에서 함수를 실행하려면 std::async 함수를 사용하여 함수와 매개변수를 지정하세요.

3. 메인 스레드에서 다른 작업을 실행하고 결과를 얻기 전에 비동기 작업이 완료될 때까지 기다립니다.

다음은 샘플 코드입니다.

//헤더 파일 포함

include

include

//비동기 작업
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를 사용하여 세마포 메커니즘을 구현할 수 있습니다.

// 헤더 파일 포함

include

include

include

include

//비동기 작업
void foo(std::promise& p ) {

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.