|
Publicité ' | ||||||||||||||||||||||||
|
|
#81 |
|
Membre Expert
![]() Formateur JAVA / XML Inscription : novembre 2007 Messages : 849 ![]() |
"java trop lourd et trop lent"
![]() on peut pas lui en vouloir en même temps, il prêche pour sa paroisse ... |
|
|
20
|
|
|
#82 | |
|
Membre Expert
![]() Formateur JAVA / XML Inscription : novembre 2007 Messages : 849 ![]() |
Citation:
Certes DataSource est une interface, mais Tomcat, GlassFish, JBOSS, WebSphere, Resin, Jetty, etc ... proposent une implémentation. Tu n'as donc pas à t'en préoccuper. D'ailleurs tout serveur JEE (light ou complet) doit proposer un pooling JDBC avec DataSource ... Proxool, C3P0, DBCP, etc. sont effectivement des implémentations qui servent, quand on souhaite absolument "gérer" toi même la connexion JDBC voire même piloter le POOL de manière programmatique ... or en JEE on préfère déléguer l'ensemble au serveur auquel on ne fournit que le Driver JDBC et le moyen de se connecter à la base (url, login, password, paramétrages divers) |
|
|
|
00
|
|
|
#83 | |
|
Membre Expert
![]() Formateur JAVA / XML Inscription : novembre 2007 Messages : 849 ![]() |
Citation:
En Web ... tout est multithreadé à commencer par APACHE HTTPD et heureusement, sinon tu ne pourrai servir qu'un seul client à la fois. Une servlet est aussi MultiThread, il y a même un POOL de Thread dédié. Idem pour les JSP (car une JSP est une servlet au final) Quant aux EJB ils sont aussi multithread ... et s'il y a bien un truc de rapide, qui tient la charge (car mécanismes de pré-pooling, serialisation) et évite les débordement de mémoire malgré la tonne de requête à traiter, c'est bien la technologie EJB. Sinon tu as raison, il ne faut pas créer de Thread dans le traitement d'une requête HTTP, car le serveur d'application doit être l'unique endroit où les Threads doivent être créés. Mais ça n'empêche pas d'avoir des Threads (voir les EJB Timer par exemple). |
|
|
|
00
|
|
|
#84 | |
|
Membre Expert
![]() ![]() Gilles VinoSoftware Developer Inscription : mars 2008 Messages : 1 309 ![]() |
Citation:
Explique pourquoi il ne faut pas créer de thread dans le traitement HTTP |
|
|
|
00
|
|
|
#85 |
|
Expert Confirmé Sénior
![]() ![]() Développeur d'applications Inscription : novembre 2005 Messages : 2 565 ![]() |
En principe tu ne crées pas de thread directement car c'est une opération assez coûteuse, trop pour le faire à chaque requête. Cela dit ça n'empêche pas que tu puisses créer un pool de thread global à ton application et t'en servir pour certaines tâches asynchrones (requête vers un service externe etc...)
|
|
|
10
|
|
|
#86 | |
|
Expert Confirmé
![]() Baptiste ROUSSELDéveloppeur Temps réel Embarqué Inscription : janvier 2011 Messages : 1 294 ![]() |
Citation:
__________________
|
|
|
|
11
|
|
|
#87 | |
|
Membre Expert
![]() Formateur JAVA / XML Inscription : novembre 2007 Messages : 849 ![]() |
Citation:
Et d'ailleurs Gugelhupf avait donné de très bons liens à ce sujet : "Creating your own threads inside an application server is generally discouraged because the server should manage threads for better scalability. You can also run into problems if the container makes assumptions about what's available in a thread context, such as security information (e.g., authenticated Subject). That typically happens if you spawn a thread and then use a server resource from that thread which is unknown to the container. Check to see if there is a way to get container managed threads from Tomcat. WebLogic and WebSphere support the commonj.WorkManager, which allows you to schedule work on container managed threads. Spring can also use commonj, but I'm not sure if that support is available on Tomcat." C'est ce que je disais plus haut. C'est le serveur d'application qui gère les Threads et doit pouvoir s'arrêter et se démarrer ... s'il y a des Threads qui trainent en cours d'exécution, seul un arrêt brutal de la JVM permettra de tout stoper, ce qui est très mauvais. Plus d'explications ici : http://stackoverflow.com/questions/5...is-discouraged |
|
|
|
10
|
|
|
#88 |
|
Membre Expert
![]() ![]() Gilles VinoSoftware Developer Inscription : mars 2008 Messages : 1 309 ![]() |
Merci pour les liens.
En fait c'est vraiment spécifique a la plateforme et au language. Mais quand je parle de développement multithreadé je ne dis pas de faire chaque opération dans un nouveau thread, mais plutot de multithreader des requetes couteuse en temps tel I/O (fichiers, web services...). Apres bien évidemment certaines choses doivent tourner en arriere plan comme l'envoie d'email par exemple. Apres il est vrai que le développement web ne nécessite pas forcément d'utiliser le multithreading, ou celui-ci peut etre fait avec des requetes Ajax depuis le client. |
|
|
00
|
|
|
#89 |
|
Membre Expert
![]() Formateur JAVA / XML Inscription : novembre 2007 Messages : 849 ![]() |
Pour être vraiment complet, JEE est multithread "à tous les étages" ... que ce soit les Servlet, les JSP, les EJB, etc ... et HEUREUSEMENT ...
Ce qui est "déconseillé" c'est de laisser au développeur le contrôle des Threads (création, terminaison) car ce doit être le serveur d'applications qui doit les gérer. Si on souhaite faire "des threads" (c'est à dire du traitement asynchrone, de la parallélisation) il y a tout ce qu'il faut sans devoir "descendre à la cave" (c'est à dire utiliser des Threads de bas niveau) : EJB Timer, Worker, EJB Asynchrones, JMS, JCA. |
|
|
00
|
|
|
#90 | |
|
Membre éclairé
![]() Didier ChaumondDirecteur de projet Inscription : octobre 2012 Messages : 111 ![]() |
Citation:
En se baladant sur le net on trouve d'ailleurs quantité d'articles pro PHP se posant des questions sur le coût d'un framework qui vient grosso modo diviser par 10 ton throughput. Allez, je remet une pièce: http://blog.dhananjaynene.com/2008/0...-jruby-groovy/, pour autant, et heureusement pour PHP, le critère de performance du langage ne sera pas le seul retenu. |
|
|
|
11
|
|
|
#91 |
|
Membre Expert
![]() Formateur JAVA / XML Inscription : novembre 2007 Messages : 849 ![]() |
Effectivement je pense qu'Andi Gutmans devra trouver quelque chose de plus crédible pour "dé-crédibiliser" les autres plateformes, et en particulier JAVA.
Par exemple, ces benchmarks montrent JAVA bien plus rapide et bien plus performant que du PHP ... : http://shootout.alioth.debian.org/u3...java&lang2=php En revanche, on peut constater que PHP consomme moins de mémoire ... mais c'est tout à fait logique compte tenu des architectures si différentes entre les deux plateformes. |
|
|
00
|
|
|
#92 |
|
Membre éclairé
![]() Inscription : juin 2006 Messages : 331 ![]() |
Je suis surpris jusqu'à 50 fois moins rapide sur certains algos qu'avec Java 7
|
|
|
00
|
|
|
#93 | |
|
Expert Confirmé Sénior
![]() ![]() Développeur d'applications Inscription : novembre 2005 Messages : 2 565 ![]() |
Citation:
Après seulement je te propose de venir dire que créer des threads à tout va ça a presque aucune incidence, qu'on s'en fout. |
|
|
|
23
|
|
|
#94 | |
|
Expert Confirmé
![]() Baptiste ROUSSELDéveloppeur Temps réel Embarqué Inscription : janvier 2011 Messages : 1 294 ![]() |
Citation:
Je suis au plus à même de pouvoir répondre puisque justement je travaille sur des benchmarks de système d'exploitation et donc dans tout cela rentre les créations de process et compagnie. On ne balance pas des threads pour n'importe quoi, mais ce n'est pas pour autant qu'il faut dire qu'il ne faut pas en créer parce que c'est une hérésie niveau temps de création car c'est totalement faux. D'autant plus que ton réutilisateur de threads qui met les contextes en cache il s'appelle l'OS justement... Balances 100 threads et consultes leur contexte et leur id avec et sans ton exécuteur et tu verras que les tid vont se répéter, que toutes les variables générées aléatoirement auront bizarrement les mêmes valeurs, ect. Bref je serai bien curieux de voir le code de ce système de la JVM si c'est autre chose qu'un simple pont vers l'OS. Je ne sais pas si windows le fait, mais en tout cas c'est le cas de tous les Unix que j'ai testé.
__________________
|
|
|
|
12
|
|
|
#95 | |
|
Expert Confirmé Sénior
![]() ![]() Développeur d'applications Inscription : novembre 2005 Messages : 2 565 ![]() |
Relis ce que tu as dit, et met ça dans le contexte, soit la création de thread par requêtes sur un serveur. Tu sous-entends clairement qu'on peut le faire, que c'est parfaitement raisonnable, ou alors tu voulais dire que c'était raisonnable pour un blog qui a 50 visites par jour je sais pas...
Citation:
Et il y a aussi l'argument de la mémoire nécessaire pour la pile, ça fait beaucoup quand on les multiplie par 100 voire 1000. Donc je te dis, créer des threads lors de chaque requête sur un serveur sachant que tu peux avoir à supporter un important stress, c'est pas bon. |
|
|
|
11
|
|
|
#96 | ||
![]() ![]() Pierre CabocheInscription : octobre 2005 Messages : 2 321 ![]() |
Citation:
En effet, face à un problème informatique, dans le meilleur des mondes on appliquerait la méthode suivante :
Seulement on prend souvent le problème dans l'autre sens :
Parallèlement, côté technologie, il y a un autre effet pervers... Lorsqu'une technologie rencontre certaines limitations, il existe en gros 2 approches possibles :
Généralement, on choisit la deuxième solution car plus simple et plus rentable... Partant de là, l'industrie a inventé son propre lexique, qu'il faut savoir décoder : "expert X" (avec X = Java | .Net | php |...) : personne connaissant les méthodes de contournement face aux limitations d'une technologie, soit par l'expérience, soit pour avoir bachoté une certification "développeur X, avec expérience dans le framework machin" : si vous êtes développeur X, avec expérience dans le framework bidule, on considérera que vos connaissances ne sont pas transférables, dans le seul but de justifier une baisse de salaire. "certifié X" : plusieurs définitions possibles :
Citation:
Une bonne connaissance en informatique passe surtout par la maîtrise d'un ou plusieurs langage dans différents paradigmes (impératif, orienté-objet, déclaratif, fonctionnel, logique...). Comme dit précédemment, l'important c'est surtout d'apporter des solutions cohérentes pour résoudre un problème (ce qui implique parfois de connaître d'autres technologies que ce qu'on utilise tous les jours). En résumé, je partage globalement ton avis concernant ces fameux "experts" (et ai appris à décoder le langage utilisé sur le marché du travail, et à me méfier de ses travers).
__________________
Derniers articles: (SQL Server) Introduction à la gestion des droits (UML) Souplesse et modularité grâce aux Design Patterns (UML) Le Pattern Etat Autres articles... |
||
|
11
|
|
|
#97 | |
|
Membre éclairé
![]() Didier ChaumondDirecteur de projet Inscription : octobre 2012 Messages : 111 ![]() |
Citation:
Mais coté profils, c'est du coté de Java que j'ai croisé le plus de "gourous" (genre EJB, Struts, hibernate, NoSQL aujourd'hui...) qui font parfois plus de dégâts que de bien a un projet, ignorant et même dénigrant toute solution simple parce que la technologie ne serais pas "noble". Au delà de l'apprentissage d'un nouveau langage, changer d'air, ça permet de découvrir d'autres catégories de problèmes, de solutions, de points de vue qui enrichiront ton expérience même dans ta propre "techno". J'ai appris coté recrutement à me méfier de certains "experts" qui peuvent te ruiner le travail de toute une équipe, leur préférant des profils plus atypiques, plus "baroudeurs" des technologies. En rapport avec le débat initial, résumer un service web a des pages PHP, son "front office", c'est pour le moins simpliste et loin de la réalité, en tout cas de la mienne. Ce n'est que la partie immergée de l'iceberg, sa partie publique, tout service web aura son back office, ses connexions avec des SI, des partenaires, des fournisseurs, ses besoins d'exploitation, de statistiques, de reporting ... Là, je ne suis pas du tout convaincu qu'une seule technologie puisse y répondre, il faudra au contraire probablement en utiliser plusieurs selon l'ensemble de ses besoins. |
|
|
|
11
|
|
|
#98 | |
|
Expert Confirmé
![]() Baptiste ROUSSELDéveloppeur Temps réel Embarqué Inscription : janvier 2011 Messages : 1 294 ![]() |
Citation:
Bien... J'ai dit que la raison que vous invoquiez n'était pas correcte. Pas que dans le fond vous n'aviez pas raison... La pile d'un thread de traitement de l'ordre de la microseconde ne pourra pas excéder une certaine taille en raison de la vitesse de chargement en mémoire. Donc il est possible de créer 1000 threads sans soucis. Le problème survient si les threads deviennent zombies. Là on plombe le serveur en peu de temps. Et c'est pourquoi il y a ce contrôleur (pool de threads). Va-t-on encore une fois rajouter des mots à mon dialogue ?
__________________
|
|
|
|
12
|
|
|
#99 |
|
Expert Confirmé Sénior
![]() ![]() Développeur d'applications Inscription : novembre 2005 Messages : 2 565 ![]() |
On ne crée que rarement des threads pour effectuer des opérations qui durent une microseconde, enfin c'est assez peu commun à mon sens. Donc oui peut être as-tu raison dans ce cas qui est pour moi un peu extrême. En fait vu que tu prends le truc assez mal on va arrêter ça (c'est vrai que si je relis mon premier post à ton encontre c'était pas très sympa et je me suis pas rendu compte alors je te présente mes excuses en guise de conclusion.)
|
|
|
10
|
|
|
#100 | |
|
Membre à l'essai
![]() Inscription : mai 2007 Messages : 47 ![]() |
Citation:
J'ai déjà lu des débats sur compilé vs interpreté, mais j'ai du mal à comprendre pourquoi je vois beaucoup d'application Java assez basique et pourtant très lente comparé à la même chose en PHP. Facebook qui est une application qui doit nécessiter une performance de malade a pourtant fait le choix d'un PHP (adapté). Et ce n'est qu'un exemple parmi d'autres. Autant, je comprends le côté industriel de JAVA, et la fulltitute d'outils qui existent pour créer une application robuste. Autant sur la performance je m'interroge. En dehors de la preche, sur quoi se base Andi pour dire que Java est trop lent ? |
|
|
|
13
|
Copyright © 2000-2013 - www.developpez.com