Forum Programmation.c Thread : comment fonctionne Apache ? comment bien faire ?

Posté par  .
Étiquettes : aucune
0
8
déc.
2008
Bonjour,


Sauriez-vous par hasard fonctionne le principe de threads avec Apache 2 ?


Ma constation ; à (chaque ?) nouvelle connexion, Apache creer un nouveau process en mémoire, mais comment cela marche ?
Quel est le principe même ? comment communique le process pere (le deamon qui receptionne les connexion) vers un nouveau process enfant (qui communique directement avec le client ?) ?


Pour le moment ma methode de conception est la suivante :
Un seul et même process ecoute sur un port, creer un thread par client, et repond au client et ceci ce repete.
A part ma maniere et celle d'Apache, il y a t-il une meilleuir maniere de faire ?


Merci par avance.
  • # Doc Apache

    Posté par  . Évalué à 2.

    En fait, Apache utilise différents modèles (multiprocess ou multithread).
    Le mieux est peut-être de lire la doc. http://httpd.apache.org/docs/2.2/mpm.html et de revenir ici poser des questions plus précises si nécessaire.
    • [^] # Re: Doc Apache

      Posté par  . Évalué à 1.

      Merci de ta réponse.

      Si je comprends bien la doc, moi ce qui me conviendrais le plus serais les des threads "securisé / sandboxé", autrement dit ; je lance un thread qui plante (buffer overflow, ...) il ne fait pas planter tout le process (donc le serveur est toujours OK, même si un des threads est hs).

      Quels types de termes dois-je recherchais ? avez-vous des man que je pourrais lire ?


      Merci beaucoup.
      • [^] # Re: Doc Apache

        Posté par  (site web personnel) . Évalué à 2.

        C'est ce qu'on appelle plus simplement un processus.

        Pour ta question de départ, dans le cas des processus, apache crée des socket unix (man socketpair) avant de forker pour communiquer avec ses fils.

        Ensuite, après un accept, il envoit la nouvelle socket à travers la socket unix (man unix -> SO_RIGHTS) et le fils communique alors directement avec le client.
  • # Threads / forks

    Posté par  . Évalué à 2.

    fork = un nouveau processus qui est la copie exacte du processus actuel.

    Apache utilise à la fois les threads et les forks.
    Il y a par exemple 5 processus pré-forkés qui attendent. Et chaque processus est configuré pour gérer par exemple 4 threads.

    En général le plus simple et le plus efficace est de faire des forks (pré-forks si vraiment tu crois que c'est important). En 5 lignes de programmes tu crés un fork et tu gères les codes de retour. Il te faut lire la doc de ton langage favoris et faire quelques essais.
    Un article de fond ne fait pas de mal non plus.
  • # select()

    Posté par  . Évalué à 2.

    Il y a aussi la méthode "multiplexée", à base de select(). Il me semble que lighttpd fonctionne comme cela, par exemple.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.