boost asio 정리 - 2 (io_service single thread 처리)
Program Lang./C++ 2017. 5. 11. 14:461. 목적
boost asio 정리 -1 첫번째 한계인 io_service start 시점부터 main() 함수가 block되는 한계를 개선하기 위한 코드
2. 코드 설명
정리-1과의 차이점은 boost::scoped_ptr<boost::
thread
> pThread;
추가이다. io_service에 대한 처리를 별도의 thread를 통해서 처리함으로써 main() 함수의 block을 막았다. 따라서 io_service의 printerHandler가 동작 중에도 main()함수에서 Key입력이나 다른 동작에 대해서 interactive하게 user에게 반응할 수 있다.
지금도 한가지 명확하지는 않지만 operation 맴버변수는 강제로 printerHander를 종료하기 위해서 넣었다. 결론적으로 io_service가 start되면 post()함수에 설정된 handler가 완전히 종료되어야지만 io_service 종료됨을 알 수 있다.
3. 실행결과
아래 실행 결과는 printerHandler loop 동작 중에 Enter 키를 누르면 반응하는 것을 알 수 있다.
4. 정리
io_service start를 별도의 하나의 thread에서 실행하도록 하여, main()함수의 thread는 block되지 않도록 하였다. 이 코드에서 살펴봐야 할 부분이 io_service start를 위해서 하나의 thread만 생성하였다. 즉, single thread 구현이다. 차 후에 논의하겠지만 single thread로 돌리기 때문에 post()함수를 추가로 호출하여 handler를 추가하더라도 post에 정의된 handler 함수간에는 sync가 맞는다. 흔히 말하는 공유자원에 대한 lock이 필요 없다는 것이다. main() 함수에서 post함수를 하나 더 추가해서 호출하더라도 모든 처리는 io_service start된 single thread에서 처리된다는 것이다. 다음절에서 multi-thread 예제를 봐보독 한다.
'Program Lang. > C++' 카테고리의 다른 글
boost asio - 정리 4 (strand 적용) (0) | 2017.05.12 |
---|---|
boost asio - 3 (multi-thread 동작 고찰) (0) | 2017.05.12 |
boost asio 정리 - 1 기본동작 (0) | 2017.05.11 |
[Basic] 클래스 상속 및 가상함수, 순수가상함수 정리 (0) | 2017.04.26 |
[Basic] 맴버변수의 상수, 정적 속성, 상수와 정적변수 동시적용 시, 상수 맴버 함수 정리 (0) | 2017.04.26 |