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

Dotnet Discussion :

Présentation d'un tutoriel au sujet de l'utilisation du multithreading


Sujet :

Dotnet

  1. #21
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Citation Envoyé par Immobilis Voir le message
    Tu t'es bien amusé je vois ça C'est très intéressant
    Oui, ton code m'a intrigué

    Citation Envoyé par Immobilis Voir le message
    Les méthodes B et C partagent le compteur "c" ainsi que le "ManualResetEvent". Cela créé une certaine dépendance. Je suis un peu réservé du coup.
    Ca se factorise très bien dans une classe avec une méthode qui prendrait un Action en paramètre
    Citation Envoyé par Immobilis Voir le message
    Pour ceux qui voudraient utiliser ces méthodes, ne faudrait-il pas mettre ce bloc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (Interlocked.Decrement(ref c) == 0)
    {
    	wh.Set();
    }
    dans un try{ }finally{ } pour être certain de décrémenter le compteur. Dans le cas contraire, à moins de mettre un timeout, on attendra indéfiniment, non?
    En effet, j'ai continué a bidouiller après coup et quand j'ai eu des erreurs, m'en suis apercu ^^

    Citation Envoyé par Immobilis Voir le message
    Dans la méthode "F", tu utilises le même client. Le Runtime utilise la même instance à l'exécution?
    A+
    Oui! Le client est le même, derrière par contre je suis pas allé vérifier mais il y a peut être un InnerChannel/requête.

  2. #22
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    Très intéressant tout ça
    Citation Envoyé par Nathanael Marchand Voir le message
    D'après moi c'est au fournisseur de brider son service en fonction de ce qu'il peut recevoir et non pas au consommateur. Du coup, y'a pas vraiment de raisons de brider côté client.
    Si on se base sur le comportement de IIS, c'est ce qui se produit. Pour autant, c'est quelque chose de difficile à mettre en place de manière efficace. Il n'y a qu'à voir les attaques DOS.

    Citation Envoyé par Nathanael Marchand Voir le message
    Erf, je reviens sur ce que j'ai dit. Quand on utilise des Thread à gogo ça fait planter le client car ça utilise trop de connections
    Laquelle de tes méthodes en particulier?

    J'ai essayé 1000 appels avec la méthode "E" et j'ai eu un plantage à cause d'un Timeout. Du coup, j'ai testé sur une virtualbox avec Windows 2003 Server (histoire de voir comment réagit IIS). J'ai encore eu le plantage entre la 750e et 800e connexion. Je mets les logs de performance en PJ (Nat_000006.csv).

    J'ai aussi testé la méthode du tuto et la méthode "E" avec 100 appels (idem PJ, Nat_000005.csv et un aperçu graphique).

    Un truc me préoccupe, c'est le nombre de connections/utilisateurs anonymes courants. Dans le cas de la méthode "E", il ne cesse d'augmenter. Est-ce ce que tu voulais dire par
    Citation Envoyé par Nathanael Marchand Voir le message
    Problème qu'on ne rencontre pas avec des pools de threads (ThreadPool et TPL)
    Edit: Il suffit de placer un sémaphore autour de l'appel et ca fonctionne
    Pourtant on dirait que cela se produit quand même avec les Task. Comment placerais-tu ton sémaphore?

    A+
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés
    • Type de fichier : 7z csv.7z (7,8 Ko, 74 affichages)

  3. #23
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    C'était ma méthode B qui me posait soucis car apparemment tous les Threads partaient d'un coup et ca saturait le nombre de connection qu'un client pouvait faire. Du coup, j'ai mis un sémaphore comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    public void Do(int n)
    {
    	var c = n;
    	var wh = new ManualResetEvent(false);
     
    	var semaphore = new Semaphore(20, 20);
     
    	for (int i = 0; i < n; i++)
    	{
    		var j = i;
    		var thread = new Thread(() =>
    			{
    				try
    				{
    					semaphore.WaitOne();
    					using (var asynchronousClient = new AsynchronousServiceReference.HelloWorldServiceClient())
    					{
    						asynchronousClient.HelloWorld("Toto");
    						Console.WriteLine(j);
    					}
    				}
    				finally
    				{
    					if (Interlocked.Decrement(ref c) == 0)
    					{
    						wh.Set();
    					}
    					semaphore.Release();
    				}
    			});
     
    		thread.Start();
    	}
     
    	wh.WaitOne();
    }

  4. #24
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    Et à propos du fait que, dans le cas de la méthode "E", le nombre de connections/utilisateurs anonymes courants ne cesse d'augmenter? A ton avis, comment résoudre ce problème?

  5. #25
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Citation Envoyé par Immobilis Voir le message
    Et à propos du fait que, dans le cas de la méthode "E", le nombre de connections/utilisateurs anonymes courants ne cesse d'augmenter? A ton avis, comment résoudre ce problème?
    As tu essayé le using autour du client ?
    Mon code original ne faisait pas le Dispose.

  6. #26
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    As tu essayé le using autour du client ?
    Mon code original ne faisait pas le Dispose.
    Oui, c'est pareil.

  7. #27
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    Salut,
    Citation Envoyé par Nathanael Marchand Voir le message
    Je dois préparer une formation pour les consultants de ma boite sur la TPL, mi janvier.
    Des news à propos de cette formation?

    A+

  8. #28
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Citation Envoyé par Immobilis Voir le message
    Salut,
    Des news à propos de cette formation?

    A+
    Yay!
    Je l'ai donné y'a deux semaines
    Le webcast ainsi que les slides seront bientôt dispos sur mon blog

Discussions similaires

  1. Réponses: 33
    Dernier message: 25/11/2011, 15h37
  2. Réponses: 6
    Dernier message: 13/04/2007, 00h16

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