William A. Rowe, Jr. wrote:
If the user must rewrite their content handlers to pay attention to
thread
jumps, and must use some sort of yeild beyond
apr_socket_poll/select(), then
I'd agree it becomes 3.0.
I wouldn't worry about protocol/mpm authors, who are a breed to ourselves
and should be able to handle any bump. It's the joe who put together
a nifty
auth or content module who has to jump through hoops to learn the new
API who
will suffer if we don't yell out **3.0**!!!
Well, I get back to thinking about the cultural difference between
open source and commercial software here. That is, the difference
between a conceptually simple system (Unix) and a system with
optimization for every special case, codesign, et. al (OS/360)
When Microsoft decided that threading would be ~the way~ in
Windows, they put a lot of effort into letting people run old
components by tagging old components as threadsafe or not, and
automatically serializing components that aren't threadsafe.
The prefork model has contributed to the reality and perception of
Apache as a reliable product. Threading is great for a system that's
built like a swiss watch, but a disaster for the tangle of scripts (or
tangle of objects) that most web sites run.
In the days of MS-DOS, I did a lot of downloading over a 2400 baud
modem, so I wrote an xmodem/ymodem client that ran in the background as
you did other things -- this was your classic interrupt-driven state
machine. I never got it to work 100% right. It's not easy to do this
kind of programming AND when you push the hardware and OS in this
direction you find out things you wish you hadn't.
I've had the same experience with single-threaded web servers such
as thttpd and boa. I'd do a quick evaluation and I'd be like "damn
that's fast" and then I'd put it into production and find that they
didn't work 100% right. I'd go back to Apache because, even if ate
more RAM than I liked, Apache worked correctly.
As Apache has been moving in the direction of more efficient
concurrency models, IIS has been moving in the direction of more
isolation. I'd love more efficiency, but I don't want to give up
reliability -- if the world's web apps are going to need to be designed
like swiss watches in the future, the world is going to pass Apache 3 by.