Re: InfoWorld web server shootout

Alex Belits (
Thu, 10 Jul 1997 02:27:28 -0700 (PDT)

On Thu, 10 Jul 1997, Alan Cox wrote:

> > On different procesors? I understand that threads context switch takes
> > less time, but that also requires additional processing for
> > syncronization. With SMP there will be less context switches, so advantage
> > will decrease while overhead remains the same.
> With SMP your "single looping task" model should indeed be one task per
> CPU, seeking to have each CPU running one task and never switching

This is what I'm trying to make possible -- never or rarely switching
task on every CPU that does all "heavy" looping processing, receiving
requests from "main" server task and replying directly to clients if it's
file sending or, if it's a processing task, to the main server where
its output is buffered, so task can receive new request before output is
sent to the client.

> > INADDR_ANY), and it's possible to do use multiple accept()'ing threads on
> > one port if they are syncronized to avoid simultaneous accept()'s. But
> You can do the simultaneously. Linux, BSD and everything else except for
> some buggy code (Linux 1.0, Solaris 2.4) handle that happily.

At least on FreeBSD it worked fine, but caused a significant performance
loss because of simultaneous awakening of accept()'ing tasks even though
for all tasks but one accept() failed when only one client connected at
the time. In FreeBSD it's changed in 2.2.x, but I haven't looked in Linux
code that handles it, and don't know if Linux suffers from the same