Un fil d'exécution (thread) est une sorte de processus « léger ». L'avantage d'un fil d'exécution, comparé à un vrai processus, est qu'il consomme beaucoup moins de ressources. Par conséquent, utiliser des fils d'exécution à la place de processus améliore les performances. L'inconvénient est que les applications exécutées dans un environnement à base de fils d'exécution doivent être thread-safe. Cela signifie que :
Les fonctions (ou dans le cas d'applications orientées objet, les méthodes) doivent être « réentrantes »—une fonction avec les mêmes données en entrée fournit toujours le même résultat, même si d'autres fils d'exécution utilisent simultanément cette même fonction. En conséquence, les fonctions doivent être programmées de façon à pouvoir être appelées par plusieurs fils d'exécution en même temps.
L'accès aux ressources (en général des variables) doit être configuré de manière à éviter les conflits entre les fils d'exécution qui se déroulent en même temps.
Apache 2 gère les requêtes soit en tant que processus séparés, soit dans un mode mixte qui combine des processus et des fils d'exécution. L'exécution en tant que processus est réalisée par le MPM « prefork ». L'exécution en tant que fil d'exécution est réalisée par le MPM « worker ». Le choix du MPM à utiliser s'effectue lors de l'installation (voir section Section 30.5, « Installation »).Le troisième mode—perchild— n'a pas encore acquis une maturité suffisante, il n'est donc pas (encore) disponible dans SUSE LINUX.