une bonne vieille méthode qui date de l'époque des OS multitâches collaboratifs (non-préemptif)
supposons que le job à exécuter soit
1 2 3 4
|
for (i > 0) {
foo(A[i--]);
} |
pour lequel i est treks grands. L’idée consiste à ne traiter qu'un petit paquet et à rendre la main. Il faut faire une fonction qui traite un paquet
function traite(A, i) {...}
cette fonction fait la boucle sur x éléments. Si on a atteint la fin du traitement, on s'arrête sinon on remet dans la pile des événements un appel à la fonction pour le paquet suivant avec un timer.
Ainsi le système récupère la main à la fin de chaque paquet et peut traiter les événements qui se sont accumulés pendant le temps du traitement. On aura alors un fonctionnement qui simule le comportement d'un thread.
Il existe une théorie informatique sur le sujet.
voici deux liens sur le sujet (un en java l'autre en C)
http://www-sop.inria.fr/meije/rp/Fai...irThreads.html
http://stephanekouadio.blogspot.fr/2...airthread.html
l'INRIA a travaillé sur le sujet et on trouve la chose sous l'intitulé Reactive Programing http://www-sop.inria.fr/meije/rp/
Si vous vous demandez pourquoi on fait toujours de la recherche sur ce genre de chose alors que les OS sont multitâches préemptif et que les langages embarquent pour la plupart la notion de Thread. La réponse est que le multitâche coopératif résous naturellement des problèmes complexes de communication entre thread.
A+JYT
Partager