The current version of Apache (the 1.3 series) is process based. That means that
the server forks itself a number of times to answer simultaneous requests.
The children are isolated from each other.
This is reliable: if a module misbehaves, the parent process kills that child and
it only affects the request being served, not the server as a whole.
Threads are similar to lightweight processes. Threads can share common data.
If a thread misbehaves it can corrupt other threads and the server as a whole
can go down. On the other hand, the thread model allows for faster, leaner
webservers. Apache 2.0 brings the best of both worlds, allowing the user to define
number of processes and number of threads per process. Apache 2.0 introduces
APR, the Apache Portable Runtime, which increases even more Apache's portability.
Finally, layered I/O brings a new level of modularity to Apache development.