Boost logo

Boost Users :

Subject: Re: [Boost-users] [Boost.Thread] Multithreaded Multithreaded Server
From: Ian Mallett (geometrian_at_[hidden])
Date: 2011-04-10 15:48:43


On Sun, Apr 10, 2011 at 1:43 PM, Igor R <boost.lists_at_[hidden]> wrote:

> > 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



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net