Boost logo

Boost :

From: Christopher Kohlhoff (chris_at_[hidden])
Date: 2006-09-29 18:06:45


Hi Scott, Scott <cheesy4poofs_at_[hidden]> wrote: > I grabbed the code in boost CVS about 2 weeks ago. Should I > get latest again? No, that will do. > the client, that's probably acceptable. But for the server we > really need multiple threads. Is it okay for each thread to > create it's own io_service to solve this problem? Yep, that's a perfectly good server design. You simply use some "load balancing" technique like round-robin to allocate incoming connections to io_service objects. (Yes, it is ok to have the acceptor and the socket being accepted on different io_service objects.) Depending on what else the server does, another approach might be to use a single io_service and single thread to do all I/O related work, and use another thread pool (possibly using another io_service) to perform the work that really needs multiple threads. > So, if I understand correctly, the UI should *not* be using > the socket class because we spawn a background thread to > receive data on that socket? Yep. Basically the approach Martin suggested is the one to use. So, in the client: - Spawn a background thread to call io_service::run() - When data arrives on the socket post it the GUI using a windows message - When you need to initiate an I/O operation, post a function object to the background thread by using io_service::post(). For the server, you can: - Use one thread per io_service object to call io_service::run(). - Allocate connections to io_services e.g. using round robin - When you want to initiate an unsolicited send on a particular connection, post a function object to that connection's io_service object. or: - Use on io_service object for all I/O, and another for managing a thread pool. - Use io_service::post() to send function objects between the objects that are associated with each io_service. Cheers, Chris


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk