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 :

Multithreading avec section critique ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 15
    Par défaut Multithreading avec section critique ?
    Bonjour a tous ,
    J'ai encore une question pour vous (ca fait bien la 4eme que je pose ici ) bref ....

    Alors en fait il y a une méthode qui doit normalement tourner 5 a 10 fois par seconde (le plus rapide étant le mieux bien sur) le problème c'est que cette méthode communique avec une application (plateforme de trading). Pour cette application, on lui fournit les "codes" des objets qui nous intéressent. Jusque la pas de problème quand il y avait 15/20 codes mais avec beaucoup de codes (190 /200) c'est beaucoup trop lent.
    Donc pour accélérer les choses je me suis dit que j'allais créer un thread par code qui irait lire les informations avec l'application .
    La j'hésite entre 2 solution parce qu'en fait les infos sont toutes récupérées dans un dataset commun d'où problème d'exclusion mutuelle ... alors soit le protège les zones de code susceptible de toucher au dataset soit chaque thread remplit son dataset (une datatable /thread) et à la fin on met tout en commun ... qu'est ce qui vous semble le mieux ? sinon y-a-t-il une autre solution pour accélérer ?
    Et autre question comment faire une barrière de synchronisation en C# ?

    Merci d'avance ...

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Pour synchroniser les threads, tu peux utiliser lock (= Monitor).
    Après il te reste aussi la solution Mutex ou Semaphores.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Vu le nombre de codes, créer un thread par code ne me semble pas très judicieux... n'oublie pas que les threads ne s'exécutent pas réellement en même temps, en fait ils se partagent le temps processeur. Au mieux tu n'auras que N threads vraiment simultanés, N étant le nombre de processeurs.

    Pour ce genre de choses, il vaut mieux utiliser un ThreadPool

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    bonjour

    Juste pour dire cela en passant :

    Tu peux faire du multithread, du Threadpool, ou tout ce que tu veux, arrive un moment ou le goulet (le dataset par exemple) ou le volume des opérations à faire ne pourra pas rentrer dans le temps imparti

    A certaines situations, le mutlithreading apporte une solution jusqu'à certaines limites

    Il ne faut pas oublier cela !

    The Monz, Toulouse

  5. #5
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Citation Envoyé par theMonz31 Voir le message
    Tu peux faire du multithread, du Threadpool, ou tout ce que tu veux, arrive un moment ou le goulet (le dataset par exemple) ou le volume des opérations à faire ne pourra pas rentrer dans le temps imparti
    En l'occurrence si j'ai bien compris, le problème vient du lien avec l'application de Trading qui met du temps à répondre. Donc thread les accès à cette application est une bonne solution

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    je suis d'accord que threader les accès avec l'application de trading est une solution qui peut résoudre le problème. Cela dit, si la dite application de Trading est lente, il va forcément arriver un moment ou les performances ne pourront être atteintes faute de performance du trading.

    Perso, j'essayerais de faire un "benchmark" des performances de l'application de Trading pour être sur que de mettre en place une solution multithread apportera réellement une solution au problème !!!

    The Monz, Toulouse

  7. #7
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Citation Envoyé par Cokate Voir le message
    La j'hésite entre 2 solution parce qu'en fait les infos sont toutes récupérées dans un dataset commun d'où problème d'exclusion mutuelle ...
    Si tu as un dataset, il doit surement être utilisé dans une interface graphique non ? Et dans ce cas ton dataset doit être créé et fonctionner dans le thread UI.

    Dans ton cas rien ne t'empêche d'utiliser un ThreadPool ( avec par exemple une 20 de thread disponible ) et d'utiliser Invoke (en winform) ou Dispatch (en WPF) pour gérer la synchro dans le dataset. Par contre au niveau perf, faut voir, j'ai comme un doute sur la rapidité de Invoke ou Dispatch

Discussions similaires

  1. Problème avec les Threads et Section critique
    Par Devildz dans le forum Débuter
    Réponses: 1
    Dernier message: 25/11/2014, 21h51
  2. Multithreading - section critique
    Par caddy dans le forum Windows
    Réponses: 3
    Dernier message: 02/01/2010, 19h35
  3. Réponses: 16
    Dernier message: 07/07/2009, 13h46
  4. Problème d'include avec une section critique.
    Par radicalrider dans le forum Visual C++
    Réponses: 21
    Dernier message: 12/07/2006, 15h38
  5. [Kylix] Section critique
    Par rahimk dans le forum EDI
    Réponses: 5
    Dernier message: 23/11/2005, 12h18

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