Apache offers a number of multi-processing modules. These are also known as MPMs and are responsible for determining how to handle customer requests. This allows administrators to change their connection management architecture simply, quickly, and conveniently.
So what are these modules?
mpm-prefork
This Apache module creates processes with one thread to handle each request, and each child can accommodate one connection at a time. As long as the volume of requests is less than the volume of processes, this module is capable of extremely fast performance.
But it can show a serious drop in quality when the number of requests exceeds the number of processes, which means that this module is not always the right choice.
Each process with this module also has a significant effect on RAM consumption, making it difficult to achieve effective scaling. However, it could still be a solid option when used in conjunction with additional components built without regard to threads. For example, since PHP lacks thread safety, this module might be the best way to work with mod_php (Apache’s module for processing these specific files) in a safe way.
mpm_worker
Apache’s mpm_worker module is designed to spawn processes capable of handling numerous threads each, each of which handles one connection. Threads prove to be more efficient than processes, so this MPM offers more robust scaling than the module mentioned above.
Since there are no more threads than processes, new connections can occupy one of the free threads instead of waiting for another suitable process to appear.
mpm_event
The third Apache module can be considered similar to the previously mentioned mpm_worker module in most situations, although it has been optimized to accommodate keepalive connections. This means that when the worker module is used, connections continue to maintain threads whether or not the requests are being made actively for the entire period that the connection remains active.
It is clear that Apache’s connection handling architecture offers considerable flexibility in selecting various connection and request handling algorithms. The options provided are primarily a result of continued server advancement, as well as the increasing demand for concurrency as the Internet has drastically changed.