Boost C++ Libraries/Boost.Asio

Boost.Asio 개요 - 핵심 개념 및 기능 - 스택리스 코-루틴

까마귀75 2020. 12. 9. 17:33
728x90
반응형

스택리스 코-루틴 (Stackless Coroutines)

coroutine 클래스는 스택리스(스택이 없는) 코-루틴에 대한 지원을 제공한다. 스택리스 코-루틴은 다음 예와 같이 프로그램에서 최소한의 오버헤드로 동기식 방식에서 비동기식 로직을 구현할 수 있도록 한다:

 

struct session : boost::asio::coroutine
{
  boost::shared_ptr<tcp::socket> socket_;
  boost::shared_ptr<std::vector<char> > buffer_;

  session(boost::shared_ptr<tcp::socket> socket)
    : socket_(socket),
      buffer_(new std::vector<char>(1024))
  {
  }

  void operator()(boost::system::error_code ec = boost::system::error_code(), std::size_t n = 0)
  {
    if (!ec) reenter (this)
    {
      for (;;)
      {
        yield socket_->async_read_some(boost::asio::buffer(*buffer_), *this);
        yield boost::asio::async_write(*socket_, boost::asio::buffer(*buffer_, n), *this);
      }
    }
  }
};

 

coroutine 클래스는 의사(pseudo) 키워드 reenter, yield 그리고 fork와 함께 사용된다. 이들은 전처리기(preprocessor) 매크로이고, Duff`s Device와 유사한 기술을 사용해 switch 문에 의해 구현된다. coroutine 클래스 문서에는 수도 키워드에 대한 상세한 설명을 제공한다.

더 보기

coroutine, HTTP Server 4 example, Stackful Coroutines.

 

 

핵심 개념 및 기능  Boost.Asio 개요  Boost.Asio 홈

728x90
반응형