Je travaille sur une application dans laquelle des milliers de tâches associées avec des centaines de périphériques, chaque tâche nécessitant, < 5ms pour commencer l'exécution, et prenant en moyenne 100ms pour terminer.Aide avec un algorithme de planification des tâches
Les conditions sont en tant que tels:
- Chaque dispositif ne peut traiter une tâche unique à la fois, par exemple, une tâche doit terminer l'exécution de son dispositif attribué avant d'être la processeed de tâche subséquente.
- Le planificateur doit être efficace. Actuellement, le traitement de la file d'attente de travail d'un périphérique prend plus de temps que la somme de ses tâches.
Voici la description de base de la mise en œuvre actuelle:
Chaque dispositif contient une file d'attente de travail qui est rempli de tâches associées à ce dispositif . Lorsqu'une tâche est mise en file d'attente, sa file d'attente est placée dans une file d'attente d'exécution globale (une file d'attente). La file d'attente d'exécution globale est consommée par un thread de travail qui déqueue les objets de tâche du périphérique, en traite un, puis place la file d'attente de périphériques à l'arrière de la file d'attente d'exécution globale. Lorsque ce périphérique donné a été dequeued à nouveau, le thread de travail vérifie si la tâche est terminée, si c'est le cas, la tâche suivante est exécutée. Ce processus se poursuit, jusqu'à ce que toutes les files d'attente de périphérique aient été épuisées de tâches dans la file d'attente globale.
Des suggestions d'amélioration? Est-ce que je l'ai dit clairement? Sinon, faites le moi savoir, et je ferai de mon mieux pour clarifier.
Merci d'avoir pris le temps de regarder par-dessus. Cordialement.
Une tâche donnée peut-elle être traitée par un seul et même périphérique, ou un périphérique peut-il traiter une tâche? Que voulez-vous dire par "une tâche prend <5ms pour commencer à exécuter"? Voulez-vous dire qu'il doit être démarré dans les 5ms? (Si non, en quoi ce fait est-il pertinent?) –
@Stephen - une tâche prend <5ms pour commencer à s'exécuter, car plusieurs étapes précèdent l'exécution de la tâche, par exemple, le périphérique doit être contacté, etc. –
@Stephen - a une tâche donnée, ou un ensemble de tâches est associé à un appareil unique, alors pour répondre à votre question: non, aucun appareil ne peut traiter de tâche. –