Let's see whether this helps against slow clients
Make ScgiRequestParser zero-copy.
Get rid of google::sparse_hash_map in favor of plain hash_map, turns out to be faster for ScgiRequestParser. Also, add a reset() function which gives another speed boost. With google sparse_hash the reset() makes it slower but with hash_map the reset() makes it faster.
Add a custom memory allocator for ScgiRequestParser's map. This makes it much faster.
Get rid of google sparse_hash, we don't use it anymore.
Add an option to avoid initializing PoolOptions strings. This reduces the amount of string manipulation actions in Nginx HelperAgent.
Use gathered I/O for sending the request header to the backend. This avoids a few system calls as well as lots of memory copying.
Make HttpStatusExtractor zero-copy and use more gathered I/O for reducing amount of system calls.
Make the string hashing function faster by treating data like longs.
Make ScgiRequestParser even faster: optimize its content parsing loop.
Use gathered I/O in MessageChannel.writeScalar() and reduce Session creation overhead by using make_shared.
Optimize CachedFileStat: use HashMap and use splice() to mark an item as most recently used.
Get rid of Apache HelperAgent, use Nginx HelperAgent instead. This makes the Apache version's architecture more like that of the Nginx version.
Make it faster.
Move the Nginx HelperAgent into common now that it's used by both Apache and Nginx.
Get rid of the old Apache HelperAgent.
Move LoggingAgent into ext/common/agents.
Get rid of ApplicationPool::Client and slim down ApplicationPool::Server to its bare essentials.
Refactor AbstractInstaller.
Move the watchdog into ext/common/agents as well.