On 07 Jun 2010, at 11:46 PM, Akins, Brian wrote:

With multi-core architectures, we're finding that humble worker on our
commodity hardware is as fast or faster than our load balancers.

+1

We soon found that the web servers spends more time doing context switches than actual work. (Or so it seems, probably a slight exaggeration). Imagine httpd with 100k threads!!! Now imagine the same amount of "work" being done
in 2 threads.  Not terribly hard to do in an asynchronous framework.

One of the php guys sent through this to us not so long ago, which goes into the gory technical details of multicore architectures, and precisely where you slow down and why:

http://lwn.net/Articles/250967/

It shows just how expensive context switching has become. When you have work to do, ideally if you can get away with a simple prefork server that shares as little as humanly possible between processes, you get a massive increase in speed from your CPU caches, which don't have to contend with one another.

If your code can fit completely into a CPU cache it is also a huge win, which is is why something plain and simple like C can be so much faster than an interpreted language (or faster than you might expect it to be). That said, if your server doesn't have work to do, ie you're just a bit-shifter, then a simple async loop will win hands down.

Regards,
Graham
--

Reply via email to