서버 프로그래밍

boost asio io_service(io_context)의 이해 및 활용

하늘흐늘 2021. 10. 26. 19:04
반응형

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로 제공합니다.

 

반응형