Consider the approach taken by RPC::Any. The request is quickly classified according to some criteria ... it could be part of the URL, part of the request, or some combination ... and a processing module for that kind of request is located, dynamically brought into memory if it’s not already there, and given the work. It is a simple yet flexible design, and, best of all, it is already implemented by someone else.
The FastCGI protocol is simple and flexible, and it can be applied in a lot of different ways. I have used it among back-end service processes as well as front-end FastCGI worker bees. Apache modules normally use a very simple strategy for apportioning out work among processes, but they don’t have to be simple strategies.
As Anonymous said, you want to pay a lot of attention to the actual workloads that your site must deal with, and constantly observe as a basis for your fine-tuning.