>  기사  >  백엔드 개발  >  C++에서 동시 프로그래밍을 구현하기 위해 코루틴을 사용하는 방법은 무엇입니까?

C++에서 동시 프로그래밍을 구현하기 위해 코루틴을 사용하는 방법은 무엇입니까?

PHPz
PHPz원래의
2024-06-04 21:33:01923검색

C++에서 동시 프로그래밍을 구현하기 위해 코루틴을 사용하는 방법은 무엇입니까?

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 작업: 코루틴은 네트워크와 같은 비차단 I/O 작업을 구현하는 데 사용할 수 있습니다. 요청 또는 파일을 읽습니다.
  • 파이프 및 필터: 코루틴은 데이터 스트림을 처리하고 변환하기 위한 파이프라인과 필터를 만드는 데 사용할 수 있습니다.
  • 동시 작업 조정: 코루틴은 병렬 데이터 처리 또는 분산 컴퓨팅과 같은 여러 동시 작업을 조정하는 데 사용할 수 있습니다.

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

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