PHP en asynchrone

PHP est nativement synchrone

Historiquement et par défaut, lorsqu’un script PHP s’exécute, il le fait de manière séquentielle et bloquante.

Cela signifie que chaque instruction est exécutée l’une après l’autre, et si une instruction (comme une requête à une base de données, un appel à une API externe, ou une lecture/écriture de fichier) prend du temps, l’exécution du reste du script est mise en pause jusqu’à ce que cette opération soit terminée.

Ce qui a comme avantages :

  • Flux Logique Linéaire : Le code est lu et exécuté de haut en bas, ce qui facilite la compréhension du cheminement logique. Il est plus intuitif de suivre l’exécution et de prédire les résultats.
  • Débogage Plus Simple : En cas d’erreur, il est généralement plus facile de localiser la source du problème car l’état du programme est prévisible à chaque étape. Il n’y a pas de course conditions (race conditions) ou de problèmes de synchronisation inattendus liés à des exécutions concurrentes.
  • Gestion des Erreurs Simplifiée : Les exceptions sont propagées de manière linéaire, ce qui permet de les gérer facilement avec des blocs try-catch classiques. L’ordre d’exécution étant fixe, il est plus simple de s’assurer que les ressources sont correctement libérées ou que les opérations de nettoyage sont effectuées.

Mais il y a certains inconvénients :

  • Blocage des Opérations (I/O Blocking) : C’est le principal inconvénient. Si une opération nécessite d’attendre une ressource externe (par exemple, une requête HTTP, une lecture de fichier, une requête de base de données), l’exécution du programme entier est suspendue jusqu’à ce que cette opération soit terminée. Cela peut entraîner une mauvaise réactivité des applications, en particulier dans les interfaces utilisateur ou les serveurs web.
  • Sous-utilisation des Ressources : Pendant qu’une opération est bloquée en attente d’E/S, le processeur reste souvent inactif, attendant que l’opération se termine. Cela peut entraîner une sous-utilisation des cœurs du processeur, surtout dans les systèmes multicœurs.
  • Évolutivité Limitée : Pour les applications serveurs, chaque requête entrante peut bloquer un thread ou un processus jusqu’à ce qu’elle soit entièrement traitée. Cela limite le nombre de requêtes simultanées qu’un serveur peut gérer efficacement, car chaque requête consomme des ressources (mémoire, thread) même pendant les périodes d’inactivité.

L’évolution de PHP vers l’Asynchrone

Programmation Asynchrone

La programmation asynchrone permet à des opérations de s’exécuter « en arrière-plan » sans bloquer le flux d’exécution principal du programme.

Le programme peut lancer une opération et continuer à faire autre chose en attendant que cette opération se termine. Une fois l’opération terminée, un mécanisme (callback, promesse, async/await) signale au programme principal qu’il peut traiter le résultat.

Avant PHP 8.1, on pouvait obtenir un comportement asynchrone

1 comment

Leave a comment