Boost C++ Libraries/Boost.Asio

Boost.Asio 개요 - 핵심 개념 및 기능 - 동시성 힌트

까마귀75 2020. 12. 9. 17:21
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_setio_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

 

컴파일러는 이러한 모든 개체에 대해 스레드 안정성을 사용하지 않는다.

 

 

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

728x90
반응형