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 작업을 호출할 수 있다.
- 라이브러리 인터페이스는 스레드 생성과 관리에 해당하는 인터페이스를 분리하여, 스레드를 사용할 수 없는 플랫폼에서도 구현을 가능하게 한다.
더 보기
728x90
반응형
'Boost C++ Libraries > Boost.Asio' 카테고리의 다른 글
Boost.Asio 개요 - 핵심 개념 및 기능 - 버퍼 (0) | 2020.12.07 |
---|---|
Boost.Asio 개요 - 핵심 개념 및 기능 - 스트랜드: 명시적 잠금없이 스레드 사용 (0) | 2020.12.07 |
Boost.Asio 개요 - 핵심 개념 및 기능 - Proactor 디자인 패턴: 스레드 없는 동시 실행 (0) | 2020.12.06 |
Boost.Asio 개요 - 핵심 개념 및 기능 - Boost.Asio 기본 구조 (0) | 2020.12.05 |
Boost.Asio 개요 - 핵심 개념 및 기능 (0) | 2020.12.05 |