boost asio에서 io_service(io_context)는 객체의 이벤트 처리를 담당합니다. 이 객체는 좀 더 자세히 보면 실제적으로 socket과 바인드 되어 socket의 이벤트 처리를 담당합니다. 이 객체는 OS kqueue, /dev/poo/, epoll, iocp와 같은 비동기 socket IO나 select와 같은 동기 IO를 해당 객체를 호출한 쓰레드에서 이벤트를 처리하도록 직렬화합니다.
이를 활용하는 방법을 살펴보겠습니다.
io_service(io_context)는 socket에 바인드 되는 관계로 socket 이벤트 처리 그룹을 만들 수 있습니다. io_service1(io_context)에는 socket1, socket2를 바인드하고 io_service2(io_context)에는 socket3, socket4를 바인드하여 두개 그룹의 이벤트 처리를 분리할 수 있습니다.
반대로 2개의 서버에 연결된 2개의 연결을 하나의 io_service(io_context)에 바인드하여 하나의 io_service(io_context)의 이벤트로 처리를 할 수도 있습니다.
참고로 socket 이벤트의 처리는 socket 이벤트로 지정한 함수가 담당 합니다.
지금까지 살펴 본 io_service(io_context)의 특성을 활용하면 다양한 socket 그룹별 처리 이벤트를 유연하게 가져갈 수 있습니다. 참고로 최신 버전에서는 클래스 이름이 io_context이며 기존 호환을 위하여 io_service를 typedef로 제공합니다.
'서버 프로그래밍' 카테고리의 다른 글
쓰레드 풀에서 CPU 사용량 줄이기 (0) | 2021.12.02 |
---|---|
성능 향상하기: IO 관련 처리 vs CPU 관련 처리 (0) | 2021.11.03 |
폴(Poll) 방식의 네트워크 처리 구현 (0) | 2021.11.02 |
boost asio io_service(io_context)의 poll과 run의 활용 (0) | 2021.10.27 |
[서평, 소개] 클라우드 디자인 패턴(Cloud Design Patterns) (0) | 2017.04.08 |
[서평, 소개] NoSQL (0) | 2017.04.01 |
라인 레인저스(Line Rangers) 서버 구조 소개 (0) | 2017.02.26 |
[서평] 온라인 게임 서버 프로그래밍 (MMORPG서버 관련 책) (0) | 2009.07.16 |