19
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

Embed Size (px)

Citation preview

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