2010-06-02 2 views
0

J'essaie d'avoir une meilleure compréhension du fonctionnement interne des travaux d'arrière-plan et comment ils améliorent les performances. Je comprends que l'objectif est que l'application renvoie une réponse à l'utilisateur aussi vite que possible, donc vous ne voulez pas, par exemple, analyser un énorme flux qui prendrait 10 secondes parce que cela empêcherait le demande d'être en mesure de traiter toutes les autres demandes.Clarifier ... Les tâches d'arrière-plan ne lient pas les ressources de l'application (dans Rails)?

Il est donc recommandé de mettre toutes les opérations de plus de 500 ms à exécuter dans un travail d'arrière-plan en file d'attente.

Ce que je ne comprends pas, cela ne retarde-t-il pas le même problème? Je sais que l'utilisateur qui a invoqué ce travail en arrière-plan obtiendra une réponse immédiate, mais que se passe-t-il si un autre utilisateur arrive juste quand le travail d'arrière-plan commence (et qu'il prend 10 secondes pour finir), ne va-t-il pas attendre?

Ou est le problème principal, requests est la seule chose qui peut arriver un-à-la-fois, alors que d'autre part une demande peut démarrer alors que les tâches d'arrière-plan + sont en cours d'exécution?

Est-ce correct?

Répondre

1

L'idée d'un processus d'arrière-plan est qu'il prend en charge tous les processus de longue durée.

Fondamentalement, il s'agit d'une application externe qui s'exécute en dehors du serveur Web avec un ou plusieurs processus qui traitent les requêtes. Par conséquent, peu importe si un autre utilisateur demande une page car le travail n'occupe pas le serveur Web, l'utilisateur n'aura pas à attendre que quelque chose se termine. Si cet utilisateur fait aussi quelque chose qui est mis dans la file d'attente d'arrière-plan, alors il va juste s'empiler là jusqu'à ce que le premier soit fini (ou dans le cas où il y a plusieurs processus qui le gèrent, dès qu'il y a un disponible).

Espérons que cette explication le rend un peu plus clair :)

+0

devenir plus clair :). une question de clarification plus, ne sont pas quelques files d'attente de travail d'arrière-plan (comme [DelayedJob] (http://github.com/tobi/delayed_job)) exécuté sur le serveur Web? Cela me fait penser que cela causerait des problèmes de performance. Peut-être que j'ai raté quelque chose là. Merci –

+0

Oui, mais ce n'est pas nécessaire. Tout ce dont il a besoin est une copie de l'application et une connexion à la base de données afin qu'elle puisse également être sur un serveur séparé. Mais oui, cela pourrait affecter les performances car il faudra que l'application soit exécutée séparément (plus de mémoire utilisée) et tout le traitement utilisera le processeur, peu importe ce que c'est. Il ne sera pas différent de l'exécuter dans la demande de l'utilisateur si. –

Questions connexes