Imaginez un site Web avec plusieurs utilisateurs connectés à partir de différentes adresses IP essayant tous de faire la même chose à la fois en utilisant le même code PHP - par exemple, télécharger une image dans un dossier ou du texte dans une base de données avec AJAX. p >
Comment le script réagira-t-il à cela?
3 Réponses :
Le script php n'est pas exclusif à une requête. Chaque requête est gérée s'il y a une nouvelle requête alors que le script d'une autre requête est toujours en cours d'exécution, elle est gérée dans un nouveau thread (jusqu'à une limite certian en fonction du serveur Web et de la configuration). Dès que la limite de handle est atteinte, la requête est en attente, un nombre suffisant de ressources unitl sont libres pour gérer la nouvelle requête.
Peu importe le nombre d'utilisateurs (cela compte bien sûr, mais comme pour cette question, disons peu d'utilisations) se connectent à votre serveur apache. lorsqu'un utilisateur se connecte au serveur et que le script php exécute, chaque utilisateur se verra attribuer un thread du pool de threads du serveur. les tâches de chaque utilisateur seront donc traitées en parallèle. Jusqu'à ce que vous atteigniez la limite de threads du serveur
si cela se produit, vous devrez équilibrer la charge en ajoutant de nouveaux serveurs et en répartissant la charge depuis les serveurs
Il n'y a pas de problème d'apriori avec plusieurs utilisateurs exécutant le même code PHP à la fois. Le code lui-même, cependant, doit être conscient qu'il peut être exécuté simultanément et gérer de tels scénarios, en particulier lors de l'accès à une ressource partagée telle qu'un dossier sur le disque ou une base de données. Par exemple, il ne doit pas assumer l'id de la ligne qu'il insère dans la base de données ou le nom du fichier qu'il crée, mais doit les générer dans un endroit sûr (par exemple, en utilisant une colonne auto_increment
, ou nommer le fichier en utilisant un UUID).