Jusqu'à présent, ce sont mes principales considérations lors de la détermination des threads par rapport aux processus:
Les threads utilisent beaucoup moins de mémoire résidente que les processus. Oui, avec les bibliothèques liées dynamiquement, beaucoup de mémoire est partagée entre le processus de contrôle Apache et ses processus enfants, mais chaque nouveau processus devra instancier tous les modules que vous avez activés.
Ceci est facilement testable en comparant l'utilisation de la mémoire de chaque processus où vous avez, par exemple, soit 5 processus et 1 thread chacun, soit 5 processus et 25 threads chacun. Dans mon cas ici, chaque processus enfant prend environ 7 Mo, quelle que soit la quantité de threads.
+ Pour les fils
Il faut plus de temps pour démarrer en termes de temps et de cycles de processeur pour charger un nouveau processus que pour un thread. Cela peut être testé en vérifiant le nombre moyen de pages servies via 'ab'.
+ Pour les fils
Un processus Les threads dépendent tous du processus. La plus grande préoccupation ici est que si quelque chose arrive au processus, cela affectera tous les threads qui lui sont associés. Si vous exécutez avec un seul processus avec un tas de threads, alors lorsque le processus se termine, les threads le seront également. Plus de processus entraîneraient donc une meilleure séparation, et donc une plus grande tolérance aux "pannes" si vous voulez.
+ Pour les processus
En relation avec (3), pour les modules tels que PHP, leur mémoire est chargée par le Processus et partagée entre tous les Threads. Cela signifie que si vous avez php avec memory_limit réglé sur 100Mbs avec 25 Threads ci-dessous, alors à la charge maximale techniquement, chaque Thread serait en mesure d'allouer un maximum de 4Mo chacun (bien sûr, cela ne se produira pas de cette façon, certains monopoliseront, certains le feront mourir de faim).
Donc, en fin de compte, cela dépend vraiment de votre cas d'utilisation. Cela étant dit, vous voudrez maximiser la quantité de threads utilisés afin de réduire l'utilisation de la mémoire et d'augmenter la réactivité. Cependant, vous devrez équilibrer cela avec une quantité appropriée de processus pour une meilleure tolérance aux pannes.
Bien sûr, je ne suis pas un expert ici car je n'ai que récemment dû m'inquiéter à ce sujet, donc j'ai hâte de voir quelles autres réponses pourraient apparaître ici!
jonathanserafini
la source