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.
728x90
반응형
'Boost C++ Libraries > Boost.Asio' 카테고리의 다른 글
Boost.Asio 개요 - 핵심 개념 및 기능 - 코-루틴 TS 지원 (0) | 2020.12.10 |
---|---|
Boost.Asio 개요 - 핵심 개념 및 기능 - 스택형 코-루틴 (0) | 2020.12.10 |
Boost.Asio 개요 - 핵심 개념 및 기능 - 동시성 힌트 (0) | 2020.12.09 |
Boost.Asio 개요 - 핵심 개념 및 기능 - 핸들러 추적 (0) | 2020.12.09 |
Boost.Asio 개요 - 핵심 개념 및 기능 - 사용자 지정 메모리 할당 (0) | 2020.12.08 |