Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain...

19
Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011

Transcript of Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain...

Page 1: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011.

Responsables : Joël Falcou et Jean-Thierry LaprestéPrésenté par : Maxence Schmitt et Romain Guidoux 22 Mars

2011

Page 2: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011.

IntroductionCréer une bibliothèque C++

Simplification de la gestion des threads

Utilisation de bibliothèques Boost

Etude des différentes solutions possibles

2

Page 3: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011.

PlanIntroduction

1.Présentation du patron de conception « Objets Actifs »

2.Les implémentations proposées

3.Détail de l’implémentation réalisée

Conclusion

3

Page 4: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011.

Les threadsUn processeur n’exécute qu’un seul thread à un instant tImpression d’exécution parallèle pour l’utilisateur

Patron Objets Actifs

Implémentations proposées

Implémentation réalisée

Threads Objets Actifs Lambda Héritage Présentation SérialisationFile de messages

4Résultats

Page 5: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011.

Les threads en C++Solutions disponibles :

Qt : Qthread

Bibliothèque POSIX : pthread

Boost : Boost.Threads

5

Patron Objets Actifs

Implémentations proposées

Implémentation réalisée

Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages

Page 6: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011.

Les sections critiquesGestion des ressources critiques

Exclusion mutuelle (mutex)

6

using namespace std;int nb = 4;

void threadWork(){ if (nb % 2 == 0) cout << "Pair : " << nb << endl; else cout << "Impair : " << nb << endl;

// Un traitement compliqué ici nb++;}

int main(void){ try { boost::thread unThread(&threadWork); unThread.join(); } catch (exception &e) {} return 0;}

Patron Objets Actifs

Implémentations proposées

Implémentation réalisée

Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages

Page 7: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011.

Les objets actifsArticle d’Herbert Sutter : ”Prefer Using Active Objets

Instead of Naked Threads”

Rendre asynchrones des méthodes d’un objet

Cacher la manipulation des threads

7

Patron Objets Actifs

Implémentations proposées

Implémentation réalisée

Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages

Page 8: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011.

Solution 1 : fonctions lambda Fonction sans nom définie pour un usage ponctuel

8

Patron Objets Actifs

Implémentations proposées

Implémentation réalisée

Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages

Page 9: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011.

Solution 1 : fonctions lambda Syntaxe utilisée par Sutter -> prochaine norme de C++

Recherches dans Boost.Lambda et Boost.Phoenix Utilisation uniquement dans les boucles

9

Patron Objets Actifs

Implémentations proposées

Implémentation réalisée

Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages

Page 10: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011.

Solution 2 : héritageA chaque méthode asynchrone correspond un sous-type de Message

10

Patron Objets Actifs

Implémentations proposées

Implémentation réalisée

Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages

Page 11: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011.

Choix de l’implémentationUtilisation des fonctions lambda impossible

Solution à base d’héritageClasse Message interne à l’Active Helper

Boost.Thread pour l’implémentation des threads

11

Patron Objets Actifs

Implémentations proposées

Implémentation réalisée

Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages

Page 12: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011.

File de messagesBoost.Interprocess

AvantagesFIFO

Synchronisée

Attente passive

12

Patron Objets Actifs

Implémentations proposées

Implémentation réalisée

Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages

Page 13: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011.

File de messagesFile de messages système

Doivent être uniques

N’est pas génériqueTrouver une solution pour sérialiser les données

Solution alternativeFile normale concurrente

13

Patron Objets Actifs

Implémentations proposées

Implémentation réalisée

Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages

Page 14: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011.

Sérialisation

Boost.Serialization

Par redéfinition de méthodeserialize() ou save()/load()

Permet de gérer les arguments des Messages

14

Patron Objets Actifs

Implémentations proposées

Implémentation réalisée

Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages

Page 15: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011.

Sérialisation d’argumentsSérialisation d’un paramètre

Sérialisation d’un pointeur d’objet actif

15

Patron Objets Actifs

Implémentations proposées

Implémentation réalisée

Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages

Page 16: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011.

Destruction d’un objet actifDestruction de l’objet actif

Destruction de l’activeHelper

Exécution des messages

Attente d’un message de fin

Fermeture thread

16

Patron Objets Actifs

Implémentations proposées

Implémentation réalisée

Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages

Page 17: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011.

TestsTests réalisés

Méthode sans paramètre

Méthode avec paramètres

Pointeur vers l’objet actif

Plusieurs objets actifs

17

Patron Objets Actifs

Implémentations proposées

Implémentation réalisée

Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages

Page 18: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011.

RésultatsLes messages d’un même objet actif patientent

jusqu’à leur exécution

Les paramètres sont bien pris en charges

Plusieurs objets actifs peuvent s’exécuter parallèlement

18

Patron Objets Actifs

Implémentations proposées

Implémentation réalisée

Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages

Page 19: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011.

ConclusionObjectifs atteints

Implémentation d’une version fonctionnelle du patron

Programme de testDocumentation d’utilisation

Ce qu’il reste à faire :Tests unitaires (Boost)Permettre le renvoi de résultats

19