2010-01-28 9 views
2

Je suis en train de développer un framework pour créer des applications efficaces dans toutes les tailles. Les applications sont constituées de modules (l'application est également un module) et la performance est importante pour moi. Je sais qu'il existe des cadres pour la modularisation, etc., mais j'avais besoin de mettre en place le mien. Bien que je ai surestimé la performance des modules individuels et les optimisé, la communication entre les objets (et entre les threads) est quelque chose que je ne peux pas décider comment mettre en œuvre. Voici les quelques options je considérais:Communication efficace entre les objets Java

  • Pipes NIO
  • événements (enregistrement auditeurs)
  • files d'attente de transaction dans le contexte de l'application

Ma question est, Lequel d'entre eux est mieux éviter les goulots d'étranglement et les verrous? Ou y a-t-il une alternative que vous pouvez conseiller?

+0

Je ne sais pas pourquoi quelqu'un a voté pour fermer ceci. C'est une vraie question. Il pose des questions sur les compromis entre divers mécanismes de communication Java, et a étudié certaines des alternatives. Semble valide pour moi. –

+0

Les informations sont insuffisantes pour donner des conseils utiles. Ces applications sont-elles dans la même machine virtuelle Java, la même machine, différentes machines sur un réseau local, etc.? Les applications sont-elles transactionnelles? Ont-ils besoin de collaborer dans des transactions? Quelles sont les primitives de communication prises en charge par le framework: RPC, messagerie asynchrone, flux de données? Quelles primitives de synchronisation? –

+0

Je pense que les exemples que j'ai donnés parlent d'eux-mêmes; tuyaux, événements ... ce ne sont que des exemples de communication à double sens. par exemple, supposons que j'ai une classe principale et un objet manager. une communication bidirectionnelle est nécessaire: la classe principale soumet un tampon à l'objet manager pour le traitement et continue l'exécution, lorsque le processus est terminé dans le gestionnaire, le résultat est envoyé à la classe principale. Je peux utiliser des tuyaux pour envoyer et récupérer des données, ou peut notifier des écouteurs enregistrés avec un résultat d'objet d'événement attaché, ou je peux sortir un tampon d'attente de la file d'attente, le traiter et le stocker dans la file d'attente des résultats. –

Répondre

0

S'il s'agit d'un projet destiné à générer du code de qualité de production, je vous conseille fortement de ne pas mettre en œuvre votre propre infrastructure. pas Tout d'abord, il est évident que vous ne savez pas vraiment ce que votre application nécessite d'un framework, ou les différentes technologies que vous pouvez utiliser pour implémenter un tel framework. Ne sous-estimez pas votre manque de connaissance, et les risques d'entreprendre un projet où vous ne savez pas ce que vous faites quand vous commencez. Deuxièmement, votre motivation pour mettre en œuvre votre propre cadre est fausse. Si vous trouvez un cadre existant trop grand et compliqué pour vos besoins, choisissez un cadre plus simple ou apprenez simplement le sous-ensemble dont vous avez besoin pour faire votre travail ... et ignorez le reste. Troisièmement, il faut beaucoup de travail pour concevoir et construire même un cadre à moitié décent. C'est probablement le temps que vous devriez consacrer à la construction de votre application. Bien sûr, c'est amusant, mais votre patron est probablement plus intéressé par les résultats.Quatrièmement, ne sous-estimez pas les avantages intrinsèques de l'utilisation d'un cadre que beaucoup d'autres personnes utilisent; par exemple. une communauté à poser des questions de (comme sur SO), une communauté pour améliorer le cadre, des personnes employables avec le cadre sur leur CV. Enfin, en mettant en œuvre votre propre cadre, vous allez probablement créer beaucoup de travaux de maintenance supplémentaires pour l'équipe/la société. Vous vous trompez et vos collègues vont vous maudire dans les couloirs pour les 10 prochaines années. Même si vous avez 100% le bon cadre, quelqu'un dans votre organisation doit le maintenir pour la durée de vie des applications qui en dépendent.

+0

Im un étudiant en fait. cadre que j'ai développé est une api pour la mise en œuvre de serveurs qui se concentrera sur un travail. Je sais tout sur les implémentations http et les cdns. J'ai déjà presque tout écrit. Après avoir lu ce que vous avez écrit, j'ai décidé d'utiliser osgi pour la modularisation. Mon serveur utilise des canaux et des sélecteurs pour lire les requêtes, puis les transmet à l'interpréteur http en tant que clé de sélection. Lorsque le serveur génère une réponse, il est réécrit au client. Je ne pouvais pas trouver un moyen d'envoyer une réponse, mais il semble que lorsque la réponse est prête. Il semble que tout ce que j'avais à faire était de régler les touches pour écrire. thnx –

+0

Tous ceux qui programment n'ont pas de boss ou ne voient pas "amusant" comme une raison valable de faire les choses. –

+0

@Bart - l'OP ne fait clairement pas ça pour s'amuser. Il peut ou non avoir un patron à ce stade, mais il doit certainement considérer les conséquences de faire quelque chose qui pourrait faire dérailler son projet. Dans ce cas, la conséquence pourrait être qu'il échoue son cours.En outre, en tant qu'étudiant, il devrait également apprendre à penser avec l'état d'esprit d'un développeur/gestionnaire professionnel. Enfin, il a demandé des conseils sur les solutions de rechange, et «utiliser un cadre existant» est la meilleure solution. –

2

Il y a beaucoup trop de variables. La seule façon de savoir sera de coder votre système de messagerie de manière à pouvoir l'écrire de différentes manières et de le mesurer au fur et à mesure que vous codez.

Pitié que vous avez jeté à l'aide de cadres, la plupart serait nettement plus rapide, plus complète et plus facile à utiliser que tout ce que vous pourriez écrire vous-même. Quiconque a proposé cette exigence devrait être confronté et peut-être renvoyé.

+0

et plus complexe et encombrant :) j'ai juste besoin d'un mécanisme simple –

+0

Bien que je comprenne votre réticence à apprendre un cadre qui semble avoir beaucoup de fonctionnalités, j'ai toujours trouvé que lorsque je ne pensais pas avoir besoin des fonctionnalités de un framework comme celui-ci c'est parce que je n'avais pas passé autant de temps à comprendre le problème que les implémenteurs de framework - finalement vous devrez implémenter ces fonctionnalités dans votre propre framework. –

1
i am developing a framework for creating efficient applications in all sizes 

Pour donner un avis très général, je vous suggère de plonger dans le code source de jboss pour obtenir une impression comment les choses sont faites quand ils sont censés travailler (peut-être la plus ancienne version que vous pouvez obtenir, comme départ point)

3

Mon seul conseil serait de ne pas aller de cette façon. Comme l'a déjà dit Bill K, la plupart des implémentations seraient beaucoup plus rapides et plus complètes. Plus important encore, il existe d'excellentes ressources pour réaliser ce que vous essayez de faire: OSGi par exemple, qui a Eclipse et Glassfish v3 à son actif.

Personnellement, je mis en œuvre quelque chose de similaire à votre description, chargement des plugins lors de l'exécution sans avoir besoin de redémarrer le conteneur. C'était un cauchemar à maintenir et à déboguer. Et plus important, alors qu'il était relativement facile pour moi de mettre en œuvre de nouveaux modules (après tout, j'ai conçu la chose), il était très difficile de programmer. J'ai fini par apprendre beaucoup de classloaders, mais c'était tout.

+1

+1 - pour la première phrase. SURTOUT parce que vous devez poser une question comme celle-ci en premier lieu !!! –

+0

+1 même chose pour moi, ce fut la raison pour laquelle je citerai des exemples de travail où les choses sont déjà faites. – stacker

+0

@stacker - nous ne savons même pas si le PO pose des questions sur le Web, alors comment pouvons-nous savoir quels sont les exemples pertinents? –