Accélérer les traitements avec des threads

guillaumech

Expert
Bonjour à tous,

J'ai une petite question et j'aurais besoin de votre avis d'expert :D

Je dispose d'une application faisant des traitements assez lourd dont voici les états :
1/ Téléchargement des données
2/ Extraction + traitements

Je répète ces étapes x fois. Ce qui prend le plus de temps est l'étape 2 car il y a de nombreuses données différentes à traiter. L'étape 2 peut durer entre 30s et 5 min.
L'exécution est séquentielle, c'est à dire que tant que l'étape 2 n'est pas finalisée, l'étape suivante (1) attend. Alors je me suis demandé si l'utilisation de thread pourrait accélérer les opérations.

Thread 1 <===== étape 1
Thread 2 <===== étape 2

Je fais partir l'étape 1 de téléchargement des données dans le premier thread, tant que les premières données ne sont pas télécharger, l'étape 2 (qui est passée dans le thread 2) ne se lance pas.
Lorsque le thread 1 à fini son premier tour, le thread 2 s'exécute et le thread 1 repart sur les données suivantes.
Comme le thread 2 à une exécution plus longue, il ne sera plus bloqué par le thread 1, donc les données seront toutes téléchargées bien avant la fin du dernier tour du thread 2.

Pensez-vous que cela puisse accélérer les choses ? Car le thread 1 va utiliser des ressources, non disponible pour le 2, donc le 2 sera ralentit ... (peut être pas autant qu'une exécution séquentielle, je sais pas).

Merci pour vos réponses ;)

Guich
 

batchy

Grand Maître
Sans plus d'info, ça me parait une bonne solution, un producer-consumer classique.

Une autre solution est de mettre l'étape 1 et l'étape 2 dans un même thread, et de lancer ce thread deux ou XXX fois. mais pour ça il faut que les deux puissent télécharger en même temps (c'est peut être pas possible, j'en sais rien).
 

guillaumech

Expert
A oui, puré, je n'y avais pas pensé !!! Mais le fait de lancer autant de thread que j'ai de tour de boucle ne va pas me prendre plus de temps (utilisation mémoire/cpu ..) que de les lancer séquentiellement ?

Edit : Ca existe des threads spéciaux C++ ? Je trouve rien sur notre ami Google, mise à part en C (forcement), ou en C#, mais en C++ :non:
 

batchy

Grand Maître
Tu n'est pas obligé de lancer tout tes threads en même temps. Tu peux faire une queue, qui lancera n threads et attendra qu'un des threads finisse pour en lancer un autre ...

Sinon, en C++, on fait pas grand chose si on n'utilise pas Boost.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 131
Messages
6 717 948
Membres
1 586 382
Dernier membre
alejandrooo
Partager cette page
Haut