Are multiple ASIO io_services a good thing?

user760577 picture user760577 · May 19, 2011 · Viewed 8.2k times · Source

I've begun using Boost.ASIO for some simple network programming, my understanding of the library is not a great deal, so please bear with me and my newbie question.

At the moment in my project I only have 1 io_service object. Which use for all the async I/O operations etc.

My understanding is that one can create multiple threads and pass the run method of an io_service instance to the thread to provide more threads to the io_service.

My question: Is it good design to have multiple io_service objects? say for example have 2 distinct io_service instances, each with 2 threads associated, do they somehow know about each other (and hence cooperate with each), or if not would they negatively affect each other?

My intention is to have 1 io_service for socket based I/O and another for serial based (tty) I/O.

Answer

Cubbi picture Cubbi · May 19, 2011

We use multiple io_service's because some of the components in our application need to run all their worker threads at certain fixed priorities, different for each component. Thus each component is given its own io_service, and each component has its own pool of threads executing run().

Other designs I could think of would be if a different number of threads in the pool is required for each IO, or, more relevant to your case, is if the pool cannot be shared because, for example, if your network IO can take out every thread and leave your serial IO waiting.