Boost C++ Libraries/Boost.Asio

Boost.Asio 개요 - 핵심 개념 및 기능 - 스레드와 Boost.Asio

까마귀75 2020. 12. 7. 15:47
728x90
반응형

스레드와 Boost.Asio (Threads and Boost.Asio)

스레드 안정성

일반적으로 개별 개체를 동시에 사용하는 것은 안전하지만, 단일 개체를 동시에 사용하는 것은 안전하지 않다. 하지만 io_context와 같은 유형은 단일 개체를 동시에 사용하는 것이 안전하다는 더 강력한 보증을 제공한다.

스레드 풀

여러 스레드에서 io_context::run()을 호출하여 완료 핸들러를 호출할 수 있는 스레드의 풀을 설정할 수 있다. 이 접근 방식은 스레드 풀에서 임의 계산 작업을 수행하는 수단으로 post()와 함께 사용할 수 있다.

 

io_context 스레드 풀에 결합된 모든 스레드는 동등한 것으로 간주되며, io_context는 임의의 방식으로 작업을 분산시킬 수 있다는 점에 유의해야 한다.

내부 스레드

특정 플랫폼에서 이 라이브러리 구현은 비동기성을 모방하기 위해 하나 이상의 내부 스레드를 사용할 수 있다. 가능한 이런 스레드는 라이브러리 사용자가 볼 수 없어야 한다. 특히 스레드는 :

  • 사용자의 코드를 직접 호출해서는 안되고
  • 모든 시그널을 차단해야 한다.

이 접근방식은 다음과 같은 보장으로 보완된다 :

  • 비동기식 완료 핸들러는 현재 io_context::run()을 호출중인 스레드에서만 호출된다.

결과적으로 알림이 전달될 모든 스레드를 만들고 관리하는 것은 라이브러리 사용자의 책임이다.

 

이런 접근 방식을 사용하는 이유는 다음과 같다 :

  • 단일 스레드에서 io_context::run()만 호출하면, 사용자 코드에서 동기화와 관련된 개발 복잡성을 피할 수 있다. 예를 들어, 라이브러리 사용자는 (사용자 관점에서) 단일 스레드인 확장 가능한 서버를 구현할 수 있다.
  • 라이브러리 사용자는 스레드가 시작된 직후와 다른 응용프로그램 코드가 실행되기 전에 스레드에서 초기화를 수행해야 할 수도 있다. 예를 들어, Microsoft COM 사용자는 반드시 CoInitializeEx를 호출해야 해당 스레드에서 다른 COM 작업을 호출할 수 있다.
  • 라이브러리 인터페이스는 스레드 생성과 관리에 해당하는 인터페이스를 분리하여, 스레드를 사용할 수 없는 플랫폼에서도 구현을 가능하게 한다.

더 보기

io_context, post.

 

 

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

728x90
반응형