728x90
반응형
동시성 힌트 (Concurrency Hints)
io_context 생성자는 프로그램에서 동시성 힌트를 지정할 수 있도록 한다. 이는 완료 핸들러의 실행에 사용되는 활성 스레드 수에 대한 io_context 구현에 대한 제안이다.
Windows I/O 완료 포트 백엔드(completion port backend)가 사용 중이면, 이 값은 CreateIoCompletionPort에 전달된다.
Reactor 기반 백엔드가 사용되는 경우, 구현은 다음과 같은 특수 동시성 힌트 값을 인식한다.
값 | 설명 |
1 | 구현에서는 io_context가 단일 스레드에서 실행되는 것으로 가정하고, 이 가정에 따라 여러 최적화를 적용한다. 예를 들어, 핸들러가 다른 핸들러내에서 게시되면, 새로운 핸들러는 빠른 스레드 지역(thread-local) 큐에 추가된다(결과적으로 현재 실행중인 핸들러가 완료될 때까지 새 핸들러가 보류됨). |
BOOST_ASIO_CONCURRENCY_HINT_UNSAFE | 이 특별한 동시성 힌트는 스케줄러와 reactor I/O 모두에서 잠금을 사용하지 않는다. 이 힌트에는 다음과 같은 제한이 있다. - io_context와 관련 I/O 개체(예: 소켓과 타이머)에 대한 모든 작업이 한번에 하나의 스레드에서만 발생하도록 주의해야 한다. - operation_not_supported로 인해 비동기식 해결 작업이 실패한다. - signal_set이 io_context와 함께 사용되면, signal_set 개체는 프로그램의 다른 io_context와 함께 사용할 수 없다. |
BOOST_ASIO_CONCURRENCY_HINT_UNSAFE_IO | 이 특별한 동시성 힌트는 reactor I/O에서 잠금을 사용하지 않는다. 이 힌트는 다음과 같은 제한이 있다. - io_context에서 함수를 실행하거나 컨텍스트 관련 I/O 개체(예: 소켓과 타이머)에 대한 모든 작업이 한번에 하나의 스레드에서만 발생하도록 주의해야 한다. |
BOOST_ASIO_CONCURRENCY_HINT_SAFE | 기본값이다. io_context는 전체 스레드에 대한 안정성을 제공하며 모든 스레드에서 별개의 I/O 개체를 사용할수 있다. |
기본값으로 생성된 io_context 개체에서 사용하는 동시성 힌트는 BOOST_ASIO_CONCURRENCY_HINT_DEFAULT 매크로를 정의하여 컴파일 타임에 재정의할 수 있다. 예를 들어, 다음과 같이 지정하는:
-DBOOST_ASIO_CONCURRENCY_HINT_DEFAULT=1
컴파일러 커맨드 라인은 프로그램에서 기본값으로 생성된 모든 io_context 개체에서 1의 동시성 힌트가 사용됨을 의미한다. 마찬가지로 1로 생성된 io_context 개체에서 사용하는 동시성 힌트는 BOOST_ASIO_CONCURRENCY_HINT_1을 정의하여 재정의할 수 있다. 예를 들면, 다음과 같이 전달하면
-DBOOST_ASIO_CONCURRENCY_HINT_1=BOOST_ASIO_CONCURRENCY_HINT_UNSAFE
컴파일러는 이러한 모든 개체에 대해 스레드 안정성을 사용하지 않는다.
728x90
반응형
'Boost C++ Libraries > Boost.Asio' 카테고리의 다른 글
Boost.Asio 개요 - 핵심 개념 및 기능 - 스택형 코-루틴 (0) | 2020.12.10 |
---|---|
Boost.Asio 개요 - 핵심 개념 및 기능 - 스택리스 코-루틴 (0) | 2020.12.09 |
Boost.Asio 개요 - 핵심 개념 및 기능 - 핸들러 추적 (0) | 2020.12.09 |
Boost.Asio 개요 - 핵심 개념 및 기능 - 사용자 지정 메모리 할당 (0) | 2020.12.08 |
Boost.Asio 개요 - 핵심 개념 및 기능 - 라인 기반 작업 (0) | 2020.12.08 |