Re: Linus on Linux, Apache and Threads

Ian D Romanick (idr@cs.pdx.edu)
Fri, 23 Apr 1999 09:14:30 -0700 (PDT)


> On Fri, 23 Apr 1999, Tony Gale wrote:
> > On 23-Apr-99 Chris Wedgwood wrote:
> > >> It ought to one of two things:
> > >>
> > >> - Use a thread to handle each request, all in one process.
> > >
> > > No, that would be insane. Perhaps use threads the way it now uses
> > > processes, but not one thread per request -- that would be death as
> > > far as performance goes.
> >
> > Depends. You can use a thread pool and queue requests which are then
> > picked up by the threads.
>
> how do you propose to do that efficiently? is there a nice way in
> Unix/Linux to hand out incoming network requests to a pool of threads?

Huh? It's not that hard of a problem. You have one (or several) thread
that just reads from network sockets. They package up the requests and put
them on the end of a queue. The other threads just pull requests off the
head of the queue. The trick is all in waking up the sleeping threads when
the queue becomes non-empty without having the "thundering herd" problem.

It is even possible, if you have only one thread adding to the queue, to
implement the queue so that the writing thread doesn't need a lock. Only
the reading threads need a lock. If you have multiple writing threads you
would need a read lock and a write lock. This enables massive amounts of
concurency, and is a huge win on mp systems.

-- 
"With a touch more confidence and a liberal helping of ignorance I would have 
been a famous evangelist."
                        -- Stranger In A Strange Land
PLENTY of ignorance at http://www.cs.pdx.edu/~idr

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/