IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#] Combinaison de threads et de process


Sujet :

C#

  1. #1
    Membre éclairé Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Par défaut [C#] Combinaison de threads et de process
    Bonjour,

    Je veux créer un Service Windows.
    Ce service enregistre des informations dans une base de données.

    Quand le service démarre, il récupère les infos dans la base de données puis exécute une série d'actions pour chaque ligne de résultat que j'ai récupéré dans ma base de données. J'appelle cette série d'actions une procédure.

    Voici ce qu'est une procédure :


    - Scruter un répertoire pour déterminer s'il y a des fichiers dedans
    Ca, je pense que je vais utiliser FileSystemWatcher.
    - S'il y a des fichiers dans le répertoires, il doit lancer un invite de commande et écrire dedans (la commande permet d'envoyer les fichiers à un autre logiciel qui effectuera le transfert)
    on peut faire ça avec des Process

    Je dois donc exécuter plusieurs de ces procédures en même temps.


    J'ai donc penser à créer des threads :
    Chaque thread correspond à une procédure, chaque thread effectuera les actions suivantes :
    - scruter répertoire (FileSystemWatcher)
    - ouvrir un invite de commande (Process)
    - écrire la commande (Process)


    Question subsidiaire : On peut bien exécuter plusieurs process en même temps ? L'exécution d'un process ne bloque pas le programme ?

    1ere question : Est ce que ce mode de fonctionnement vous paraît cohérent et réalisable ?


    1. Chaque thread doit exécuter sa procédure dans une boucle infinie.
    2. Chaque thread doit attendre tous les autres avant de recommencer sa boucle.
    3. Avant que tous les threads recommencent leur boucle, il faut attendre un intervalle de temps définit dans un timer.

    2ème question : Est ce que ça vous paraît réalisable techniquement ?


    Merci à tous ceux qui prendront la peine de me répondre.
    Je n'ai pas envie de me lancer dans un truc si ce n'est pas réalisable.

  2. #2
    Membre expérimenté

    Inscrit en
    Septembre 2004
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 105
    Par défaut
    Salut,

    Tu peux effectivement créer un thread par type de travail, mais ça ne sera pas très efficace, surtout si tu as une puissante machine (multi-cores) et que le travail stresse le processeur.

    Une simple solution serait d'utiliser le ThreadPool pour executer ces taches au fur et à mesure. Mais ça ne marchera pas bien si tu peux avoir des milliers de nouvelles taches en quelques minutes.

    La solution la plus "scalable" est celle utilisé par Windows Azure: Les notions clés à comprendre sont: Web Role, Worker Role et Queue.
    En gros, les travaux à faire sont mis dans une queue, le server lance plusieurs Worker Roles et chaque worker role a une boucle infinie qui essai de prendre un travail dans la queue et de le faire.

    Quelques détails: Dans ton cas, un "worker role" peut être un thread.
    Si un travail est limité par le processeur, tu devrais créer autant de threads qu'il y'a de processeurs (utilise Environment.ProcessorCount). Sinon, teste pour trouver le nombre magique qui utlise la machine au max sans l'étouffer.

    Il y'a beaucoup de petites optimisations que tu peux faire... Tout dépends de la quantité et de la complexité de travail à faire.

    Au fait, bien que tu dises pouvoir lancer la commande en parallele sans probleme, fait attention à ne pas lancer trop de commandes d'un coup (en fait, pour chaque thread, tu devrais ajouter une routine pour attendre que la commande finisse avant dans lancer une autre)

    Pour plus de détails sur le modèle Role de Windows Azure, lire: (en anglais)
    http://blog.smarx.com/posts/windows-...deal-with-spam
    http://www.ronaldwidha.net/2009/05/0...-for-in-azure/

  3. #3
    Membre éclairé Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Par défaut
    Merci pour ta réponse.

    La solution Windows Azure me semble approprié (vu comment tu me le décris).
    Mais je pense ne pas être assez aguerri pour tenter d'implementer le systme dans mon application.

    Je vais d'abord voir ce que je peux faire avec Threapool.
    Cette classe me semble suffisante pour mon application.

    Je n'avais pas pensé que le fait de lancer plusieurs commandes dans un intervalle trop rapproché pouvait peut être posé problème.
    Pour palier ce problème, je pourrais mettre l'execution de la commande dans une section critique..

    Merci en tout cas. Je laisse ce sujet ouvert, j'aurais peut être d'autres questions par la suite.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Thread, Jframe et process
    Par darkloy dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 24/11/2010, 14h58
  2. Suspendre les Thread d'un Process
    Par Code Rom dans le forum Windows
    Réponses: 7
    Dernier message: 28/05/2010, 11h06
  3. Pile des threads d'un process
    Par matdur dans le forum C#
    Réponses: 4
    Dernier message: 06/10/2007, 16h38
  4. thread java et process linux
    Par blured dans le forum Concurrence et multi-thread
    Réponses: 1
    Dernier message: 27/06/2007, 14h58
  5. lister les threads d'un process
    Par kaff dans le forum Windows
    Réponses: 3
    Dernier message: 22/04/2006, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo