스택형 코-루틴 (Stackful Coroutines) spawn() 함수는 스택형 코-루틴을 실행하기 위한 고수준 래퍼이다. 그것은 Boost.Coroutine 라이브러리를 기반으로 한다. spawn() 함수는 다음 예와 같이 프로그램이 동기식 방식으로 비동기식 로직을 구현할 수 있도록 한다: boost::asio::spawn(my_strand, do_echo); // ... void do_echo(boost::asio::yield_context yield) { try { char data[128]; for (;;) { std::size_t length = my_socket.async_read_some( boost::asio::buffer(data), yield); boost::asio::async_w..
동시성 힌트 (Concurrency Hints) io_context 생성자는 프로그램에서 동시성 힌트를 지정할 수 있도록 한다. 이는 완료 핸들러의 실행에 사용되는 활성 스레드 수에 대한 io_context 구현에 대한 제안이다. Windows I/O 완료 포트 백엔드(completion port backend)가 사용 중이면, 이 값은 CreateIoCompletionPort에 전달된다. Reactor 기반 백엔드가 사용되는 경우, 구현은 다음과 같은 특수 동시성 힌트 값을 인식한다. 값 설명 1 구현에서는 io_context가 단일 스레드에서 실행되는 것으로 가정하고, 이 가정에 따라 여러 최적화를 적용한다. 예를 들어, 핸들러가 다른 핸들러내에서 게시되면, 새로운 핸들러는 빠른 스레드 지역(thre..
핸들러 추적 (Handler Tracking) 비동기식 프로그램의 디버깅을 지원하기 위해 Boost.Asio는 핸들러 추적 기능을 지원한다. BOOST_ASIO_ENABLE_HANDLER_TRACKING을 정의하여 기능이 활성화되면, Boost.Asio는 표준 오류 스트림(standard error stream)에 디버깅 출력을 기록한다. 출력은 비동기식 작업과 핸들러 간의 관계를 기록한다. 이 기능은 디버깅할 때, 비동기식 작업이 체인으로 연결된 방식이나 보류 중인(pending) 비동기식 작업이 무엇인지 알아야 하는 경우 유용하다. 다음은 HTTP 서버 예제를 실행하고 단일 요청을 처리한 후 "Ctrl+C"를 통해 종료할 때의 출력이다: @asio|1589424178.741850|0*1|signal_..
사용자 지정 메모리 할당 (Custom Memory Allocation) 많은 비동기 작업은 작업과 관련된 상태를 저장하기 위해 객체를 할당해야 한다. 예를 들어, Win32 구현에서는 Win32 API 함수에 전달하기 위해 OVERLAPPED-파생 객체가 필요하다. 또한, 프로그램에는 일반적으로 쉽게 식별할 수 있는 비동기 작업 체인이 포함되어 있다. 반이중(half duplex) 프로토콜 구현(예: HTTP 서버)에서는 클라이언트당 하나의 작업 체인(수신 후 전송)을 갖는다. 전이중(full duplex) 프로토콜 구현에서는 병렬(parallel)로 실행되는 두 개의 체인을 갖는다. 프로그램은 이 점을 활용하여 체인의 모든 비동기 작업에 대한 메모리를 재사용할 수 있어야 한다. 사용자 정의 Handl..