C++에서 동시 프로그래밍을 구현하기 위해 코루틴을 사용하는 방법
코루틴은 프로그래머가 별도의 스레드를 만들지 않고도 병렬 작업을 수행할 수 있게 해주는 경량 동시성 기본 요소입니다. 이는 작업을 전환할 때 코루틴이 스레드보다 훨씬 적은 오버헤드를 소비하므로 I/O 집약도가 높은 애플리케이션에 유용합니다.
C++의 코루틴
코루틴은 C++ 20에서 std::coroutine 프레임워크로 도입되었습니다. 코루틴은 실행을 일시 중단하고 co_yield
표현식을 통해 값을 반환할 수 있는 생성기 함수입니다. 일반 생성기와 달리 코루틴은 실행을 여러 번 일시 중지하고 다시 시작할 수 있습니다.
// 一个协程示例 std::coroutine<int> my_coroutine() { int value = 0; while (true) { value++; co_yield value; // 挂起执行并返回 value } }
코루틴의 실제 예
코루틴은 다음 시나리오에서 매우 유용합니다.
예: 비차단 I/O에 코루틴 사용
다음 예에서는 비차단 네트워크 요청에 코루틴을 사용하는 방법을 보여줍니다.
#include <iostream> #include <future> // 一个协程来发送 HTTP 请求 std::coroutine<std::string> get_url(const std::string& url) { // 创建一个 HTTP 客户端 auto client = std::make_unique<cpprestsdk::http_client>(url); // 向服务器发送 GET 请求 auto response = co_await client->request(cpprestsdk::methods::GET); // 返回响应体 co_return response.extract_string().get(); } int main() { // 并发发送两个 HTTP 请求 auto f1 = std::async(std::launch::async, get_url("https://example.com/1")); auto f2 = std::async(std::launch::async, get_url("https://example.com/2")); // 获取请求结果 std::cout << f1.get() << std::endl; std::cout << f2.get() << std::endl; }
위 내용은 C++에서 동시 프로그래밍을 구현하기 위해 코루틴을 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!