ASIO: multiple threads, single io_service

Hi, I have some (beginners) question about the example server3-porgram that ships with the library. It uses multiple threads with a single io_service. In the method server::run() this happens: std::vector<boost::shared_ptr<boost::thread> > threads; for (std::size_t i = 0; i < thread_pool_size_; ++i) { boost::shared_ptr<boost::thread> thread(new boost::thread(boost::bind(&boost::asio::io_service::run, &io_service_))); threads.push_back(thread); } for (std::size_t i = 0; i < threads.size(); ++i) threads[i]->join(); But when are the threads actually scheduled? Does this happen by the shared io_service? Are the registered callback methods for async_read, async_accept, etc executed in the threads? Also, are there any tradeoffs that I should know off for using the single io_service vs io_service-per-thread approach? Thank you, Andrej ___________________________________________________________ Yahoo! Mail is the world's favourite email. Don't settle for less, sign up for your free account today http://uk.rd.yahoo.com/evt=44106/*http://uk.docs.yahoo.com/mail/winter07.htm...

On Thu, Jun 21, 2007 at 07:09:08PM -0700, Andrej van der Zee wrote:
Does this happen by the shared io_service? Are the registered callback methods for async_read, async_accept, etc executed in the threads?
Yes and yes.
Also, are there any tradeoffs that I should know off for using the single io_service vs io_service-per-thread approach?
An io_service per thread instead of one io_service able to use all the threads sounds similar to the one-thread-per-connection approach, with some extra indirection if you plan to use async functions. It would have all the drawbacks of that approach. On the other hand, programming to that model is going to be familiar to most people. Andrew.
participants (2)
-
Andrej van der Zee
-
Andrew Agno