
On Sun, Apr 10, 2011 at 1:43 PM, Igor R
I'm trying to write a multithreaded multithreaded server (two multithreaded operations): ideally, there should be a single process, containing at least two threads. The first thread handles various tasks (and can start other threads to help it as well). The other thread waits for incoming connections, and adds a new thread for each one:
So, for 1000 connection you end up with 1000 threads, don't you?
Basically. There'd be thread 1 (the server background operations thread), plus any helpers it had (say 0). Then, there'd be thread 2 (listener) and then 1000 connection threads, for a total of (1+0)+(1+1000) = 1002 threads.
Unfortunately, when a connection is found, Thread 1 stops. I can only attribute this to a lock boost::asio::io_service puts, although I have no idea.
io_service::run() blocks the thread. You can think of it like a "message loop" -- it runs as long as io_service has completion handlers to dispatch.
Right, but I wouldn't expect it to block other threads (i.e., thread 1). Thread 2 should block, running in its own little thing, but thread 1 should keep running, right? Or does io_service::run() block *all* threads in the process? Thanks, Ian