web-dev-qa-db-fra.com

Php: quand utiliser pthread

Je ne sais pas grand chose sur l'utilisation des threads mais j'ai cherché dans pthreads pour php et cela semble très intéressant et facile, ou plus facile que je ne le pensais ...

J'ai recherché des exemples et parcouru la documentation, mais je n'ai trouvé aucun exemple concret du moment où il est réellement avantageux d'utiliser des threads, c'est certainement pour de longues tâches qui ne dépendent pas les unes des autres, comme faire de nombreuses requêtes http ou peut-être envoyer des mails.

Mais qu'en est-il de l'écriture des entrées du journal? Inserts dans les bases de données? (comme le suivi de l'activité des utilisateurs) Récupération à partir de la base de données (puis-je renvoyer des données à partir d'un thread?)

Est-ce que cela augmentera les performances ou la surcharge de création de threads est-elle trop importante? (même si je pouvais aussi utiliser un pool de travailleurs pour réduire les frais généraux, je pense ...)

Tous les conseils ou exemples sont grandement appréciés!

26
joschua011

Il existe de nombreux exemples inclus dans la distribution et disponibles sur github:

https://github.com/krakjoe/pthreads/tree/master/examples

Ces exemples incluent des éléments tels qu'un pool de threads à usage général, un serveur de socket multithread et un SQLWorker.

Les Threads créés par pthreads sont aussi sains et sûrs que les threads que Zend lui-même configure pour répondre aux demandes via une SAPI multi-thread. Ils sont compatibles avec toutes les mêmes fonctionnalités, ainsi que tout ce que vous attendez d'une API de threading de haut niveau (presque).

Il y aura toujours des limites à l'implémentation du filetage dans les entrailles d'une architecture de partage rien, mais les avantages, en termes d'utilisation de meilleures ressources physiques à votre disposition, mais aussi la convivialité globale de PHP pour une tâche donnée dépasse de loin les frais généraux de travail dans cet environnement.

Les objets inclus dans pthreads fonctionnent comme tout autre PHP objet le fait, vous pouvez lire, écrire et exécuter leurs méthodes, depuis n'importe quel contexte avec une référence à l'objet.

Vous pensez exactement dans la bonne direction: une mesure de l'efficacité ne réside pas dans le nombre de threads exécutés par votre application, mais dans la façon dont ces threads sont utilisés pour servir au mieux l'objectif principal de l'application. Les travailleurs sont une bonne idée, partout où vous pouvez les utiliser, faites-le.

En ce qui concerne les choses spécifiques que vous avez posées, un LoggingWorker est une bonne idée et fonctionnera, n'essayez pas de partager ce flux car cela ne sert à rien, il sera parfaitement stable si le travailleur ouvre le fichier journal ou la connexion à la base de données et les empilables exécutés par celui-ci peuvent y accéder. Un SQLWorker est inclus dans les exemples, encore une fois, une autre bonne idée où l'API n'a pas d'API asynchrone décente, ou vous préférez simplement le flux de programmation multi-thread.

Vous n'obtiendrez pas de réponse meilleure ou plus correcte: j'ai écrit pthreads par moi-même.

93
Joe Watkins