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

Langage Java Discussion :

Problème de multithreading


Sujet :

Langage Java

  1. #21
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Là, tu ne me montres qu'un scénario où un lance qu'UNE seule requête à chaque fois, jamais plusieurs en même temps. On est d'accord.

    Et tu ne réponds pas à la question :

    Citation Envoyé par joel.drigo Voir le message
    Est-ce qu'il faut attendre qu'un lot de requêtes soit terminé avant de lancer le suivant ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  2. #22
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 16
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Là, tu ne me montres qu'un scénario où un lance qu'UNE seule requête à chaque fois, jamais plusieurs en même temps. On est d'accord.

    Et tu ne réponds pas à la question :
    Si j'ai dit qu'il peu en avoir plusieurs en même temps:
    17:00:10 une autre requête
    17:00:10 une autre requête

    c'est la même seconde

  3. #23
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Ok, ça aurait été plus clair si tu l'avais explicité avec des mots. Mais soit. Bon, le format du fichier n'est super pratique non plus, mais admettons.

    Mais ça ne répond toujours pas à la question que j'ai posée.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #24
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 16
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Est-ce qu'il faut attendre qu'un lot de requêtes soit terminé avant de lancer le suivant ?

    Bah, des que toutes les requêtes ont finis de s’exécuter en même temps à 17:30:00, et que la ou les prochaines doivent s'exécuter à 17:30:03, il faut attendre 3 secondes pour qu'elles se lance

  5. #25
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Non, mais une requête ça prend du temps pour s'exécuter.
    Si on lance une requête à 17:00:00 et quelle dure 10 secondes, elle se termine à 17:00:10, et que je suis censé en lancer une à 17:00:01, je la lance quand même immédiatement, même si celle qui a été lancée à 17:00:00 est encore en train de tourner ?

    Donc, premièrement on lit le fichier et on le convertit en liste de listes de requêtes associées à une heure de démarrage. On a donc n lot de requêtes qu'on va programmer pour que chacun se lance aux heures prévues. Ce serait plus pratique si on avait des temps relatifs (compatibles avec un ScheduledExecutorService), mais on peut les calculer automatiquement, par différence avec la première. On obtient donc une liste de tâches, qu'on peut scheduler pour qu'elles s'exécutent qu'une seule fois, au bout d'un délai. Une tâche à en entrée une liste de requêtes. Ce qui permet de déterminer un nombre de threads (un par requête). Bien sûr, selon la configuration, on pourrait avoir un nombre considérable de threads, mais c'est comme ça (il faut soit changer la config, soit s'en contenter). On peut utiliser un CachedThreadPool, ce qui permettra de recycler des threads, sans pour autant bloquer des requêtes si tous les threads sont en cours de requête, et sans avoir à se soucier de combien de threads il faut.
    Si on était sûr (d'où ma question) qu'aucune requête ne peut être lancée alors que des requêtes précédemment lancées sont encore encore en cours, ce serait plus simple : après avoir lu le fichier en entier, on peut connaitre le nombre maximum de requêtes à exécuter en même temps, donc le nombre de threads maximum qu'il faut, et donc la taille du pool du schedulerService. Il suffit alors de parcourir les lignes du fichiers et de schéduler les requêtes correspondantes avec le délai correspondant (on a besoin que d'un ScheduledExecutorService et c'est tout).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #26
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Ouais, ben moi à l'arrache vu les contraintes, je me casserais pas la tête.

    Je ferais un Thread maitre qui lit le fichier CSV et se synchronize sur le timing
    A chaque temps de déclenchement, je lancerais 1 ou plusieurs thread avec chacun directement les paramètres de la requête qu'il dois exécuter.


    Ainsi: pas besoin de synchro entre threads, chacun ayant ses tâches bien à lui
    Le thread gérant le temps n'a pas grand chose comme travail a faire et peu s'ensortir avec des sleeps ou un timer bien calibrés.




    La solution propre: utiliser un scheduler genre quartz auquel tu file toutes les tâches à effectuer et tu calibre son nombre de thread pour qu'il y aie en aie en suffisance. Moins de dev à faire, plus de chose à apprendre.

  7. #27
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 16
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Non, mais une requête ça prend du temps pour s'exécuter.
    Si on lance une requête à 17:00:00 et quelle dure 10 secondes, elle se termine à 17:00:10, et que je suis censé en lancer une à 17:00:01, je la lance quand même immédiatement, même si celle qui a été lancée à 17:00:00 est encore en train de tourner ?
    Oui c'est ça, merci. et comment faire pour dire qu'une autre requête peut s"exécuter même si celle d'avant n'est pas terminé?

  8. #28
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par vLemaistre Voir le message
    comment faire pour dire qu'une autre requête peut s"exécuter même si celle d'avant n'est pas terminé?
    Bah, justement, en les exécutant chacune par un thread différent. C'est l'inverse qui plus compliqué surtout quand les requêtes doivent être lancée à une heure particulière
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Problème serveur multithread
    Par asnaeb dans le forum C#
    Réponses: 4
    Dernier message: 01/04/2011, 16h49
  2. Réponses: 16
    Dernier message: 01/10/2010, 14h47
  3. Réponses: 8
    Dernier message: 04/03/2009, 15h39
  4. [HGL]Problème de multithreading
    Par <Zer0> dans le forum Haskell
    Réponses: 6
    Dernier message: 21/06/2008, 14h44
  5. Réponses: 4
    Dernier message: 13/02/2008, 13h53

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