• [^] # Re: Statistiques...

    Posté par . En réponse à la dépêche Apache 2.0 disponible pour tous. Évalué à 10.

    Du point de vue de Linux, un thread est un processus ordinaire qui partage son espace mémoire avec d'autres processus du même type.

    Linux crée donc un VRAI processus, ce qui est bien plus logique, ça évite beaucoup de ré-écriture, beaucoup de complexité, et ... beaucoup de bugs.

    Fork quand à lui, n'est pas si lourd que cela, parce qu'en réalité, pratiquement rien n'est dupliqué, le noyau fonctionne en mode 'copie sur écriture', la mémoire n'est dupliqué que lorsqu'il y a effectivement une écriture (qui fait que les données changent entre le père et le fils), et cette copie ne se fait que sur la page mémoire concernée (4Ko sur i386).

    La différence entre un processus et un thread n'est finalement pas vraiment au niveau des performances sous Linux, ça concerne plutôt la possibilité de partager de la mémoire. Avec des processus il faut passer par des mécanismes un peu lourd comme shm ou un socket, avec des threads c'est bien plus simple. En cas de bug, le modèle processus reste bien plus simple à gérer, on ne perturbe qu'un processus, avec les threads, on fait tomber tous les threads.

    Enfin Apache doit généralement être root pour pouvoir se binder sur le port 80, avec des processus, tous les serveurs qui répondent aux requêtes ne sont pas root, les exploits n'exposent que l'identité sous laquelle tourne le serveur. Avec les threads, on ne peut pas utiliser ce genre de solution.