> 백엔드 개발 > C++ > 본문

C++ 코드에서 비동기 프로그래밍을 수행하는 방법은 무엇입니까?

WBOY
풀어 주다: 2023-11-02 08:54:40
원래의
1204명이 탐색했습니다.

C++ 코드에서 비동기 프로그래밍을 수행하는 방법은 무엇입니까?

C++ 코드에서 비동기 프로그래밍을 수행하는 방법은 무엇입니까?

소프트웨어 개발 분야에서 비동기 프로그래밍(Asynchronous 프로그래밍)은 필요한 기술 중 하나가 되었습니다. CPU 집약적인 작업과 IO 집약적인 작업의 성능 균형을 더 잘 맞출 수 있으므로 프로그램 코드를 동시에 또는 병렬로 실행할 수 있으므로 프로그램의 응답 속도와 전반적인 성능이 향상됩니다. 현재 비동기 프로그래밍은 많은 플랫폼과 프로그래밍 언어에서 널리 사용됩니다. C++ 언어는 고성능 프로그래밍 언어이며 비동기 프로그래밍 모드도 많은 프로젝트에서 널리 사용되었습니다. 이 기사에서는 모든 사람이 비동기 프로그래밍을 마스터할 수 있도록 C++ 언어의 비동기 프로그래밍 방법을 소개합니다.

C++11의 비동기 프로그래밍 방법

C++11 표준에는 비동기 프로그래밍을 위한 std::async가 도입되었습니다. std::async 함수는 새 스레드를 시작하고 비동기 계산 결과를 나타내는 std::future 객체를 반환하는 데 사용됩니다. 함수는 다음과 같이 정의됩니다.

template< class Function, class... Args >
future<typename result_of<Function(Args...)>::type>
async( launch policy, Function&& f, Args&&... args );
로그인 후 복사

그 중 매개변수 정책은 실행 전략입니다. 옵션은 std::launch::async 및 std::launch::deferred입니다. 후자는 비동기 계산의 시작을 지연시키는 것을 의미합니다. 매개변수 f는 실행될 함수 또는 함수 개체입니다. 매개변수 args는 함수 또는 함수 개체의 매개변수입니다.

비동기 프로그래밍에 std::async를 사용하는 샘플 코드는 다음과 같습니다.

#include <iostream>
#include <future>
#include <chrono>
#include <thread>

using namespace std;

int async_func(int x, int y)
{
    cout << "async_func start." << endl;
    std::this_thread::sleep_for(std::chrono::seconds(1));
    cout << "async_func end." << endl;
    return x + y;
}

int main()
{
    std::future<int> result = std::async(std::launch::async, async_func, 1, 2);
    cout << "main func start." << endl;
    std::this_thread::sleep_for(std::chrono::seconds(2));
    cout << "main func end." << endl;
    int res = result.get();
    cout << "result: " << res << endl;

    return 0;
}
로그인 후 복사

이 코드에서는 std::async를 사용하여 비동기 계산 스레드를 열고, async_func 함수를 비동기적으로 실행하고, 값을 전달합니다. 1과 2에 대해 각각 매개변수 x와 y의 계산 결과가 반환됩니다. 메인 스레드에서는 먼저 2초간 멈췄다가 비동기 계산 스레드의 실행이 완료된 후 계산 결과를 얻어서 인쇄했습니다.

위 코드를 실행하면 출력 결과는 다음과 같습니다.

async_func start.
main func start.
async_func end.
main func end.
result: 3
로그인 후 복사

출력 결과에서 볼 수 있듯이 비동기 계산 프로세스 중에 메인 스레드는 차단되지 않지만 계속해서 후속 코드를 실행합니다. 또한 비동기 계산 중에 프로그램에서 예외가 발생하는 경우 해당 예외가 처리되지 않으면 프로그램이 중단된다는 점에 유의해야 합니다.

C++의 타이머 비동기 프로그래밍 방법

비동기 프로그래밍에 std::async를 사용하는 것 외에도 C++에서는 비동기 프로그래밍에 시스템 타이머를 사용하는 것과 같은 다른 비동기 프로그래밍 방법도 제공합니다. 타이머는 이벤트를 트리거하거나 정기적으로 작업을 수행하는 데 사용되는 운영 체제의 일반적인 메커니즘입니다. C++에서는 std::chrono 및 std::thread 라이브러리의 관련 함수를 사용하여 아래와 같이 타이머 비동기 프로그래밍을 구현할 수 있습니다.

#include <iostream>
#include <chrono>
#include <thread>

void timer_func()
{
    std::cout << "timer func called." << std::endl;
}

int main()
{
    int delay_time = 200;
    std::chrono::milliseconds delay(delay_time);
    while(true)
    {
        std::cout << "wait for " << delay_time << " milliseconds." << std::endl;
        std::this_thread::sleep_for(delay);
        timer_func();
    }

    return 0;
}
로그인 후 복사

이 예제 프로그램에서는 std::this_thread::sleep_for 함수를 사용합니다. , 20밀리초 지연을 시뮬레이션하고 지연이 끝난 후 타이머_func 함수가 트리거되어 타이머의 비동기 프로그래밍을 실현합니다. 위의 코드를 실행하면 대기 시간이 터미널에 지속적으로 출력될 수 있으며, "timer func Called"가 주기적으로 출력됩니다.

타이머의 정확도와 성능은 운영 체제 로드, 시스템 시간 정확도 등과 같은 다양한 요인에 의해 쉽게 영향을 받는다는 점에 유의해야 합니다. 따라서 실제 애플리케이션에서 특정 실시간 요구 사항이 있는 경우 일부 최적화 및 조정이 필요합니다.

결론

비동기 프로그래밍은 소프트웨어 개발의 필수 기술 중 하나가 되었습니다. C++ 언어에서는 std::async 및 시스템 타이머와 같은 메커니즘을 사용하여 비동기 프로그래밍을 구현할 수 있습니다. 실제 프로그래밍에서 비동기 프로그래밍을 사용하면 멀티 코어 CPU를 더 효과적으로 활용하고, 코드의 병렬 또는 동시성 성능을 향상시키며, 코드의 응답 시간을 줄일 수 있습니다. 이 기사에서는 비동기 프로그래밍에 대한 기본 지식만 소개합니다. 실제 애플리케이션은 멀티스레딩 메커니즘, 스레드 동기화 메커니즘 및 기타 기술을 사용하여 완성되어야 합니다. 실제 응용 프로그램에는 프로그램 오류 및 성능 문제를 방지하기 위해 관련 기술에 대한 심층적인 이해와 숙달이 필요합니다.

위 내용은 C++ 코드에서 비동기 프로그래밍을 수행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿