Python vs. Java - Que prendriez-vous pour faire de la programmation concurrente et pourquoi? [fermé]

StackOverflow https://stackoverflow.com/questions/1861457

Question

De plus, sinon python ou java, alors auriez-vous plus généralement choisir un statiquement typé ou un langage de type dynamique?

Était-ce utile?

Autres conseils

Stackless Python ! Cette variante de Python spécialement conçu pour la concurrence.

Mais à la fin il dépend de votre plate-forme cible et ce que vous essayez d'atteindre.

Pour concurrency, j'utiliser Java. En utilisant Java, je veux dire en fait Scala , qui emprunte beaucoup à partir des constructions de Erlang accès concurrentiel, mais est (probablement ) plus accessible à un développeur Java qui n'a jamais utilisé auparavant.

fils de Python souffrent d'avoir à attendre que l'interprète de verrouillage global, ce qui rend vrai la concurrence (dans un seul processus) inatteignables pour les programmes de CPU lié. Si je comprends bien, Stackless Python résout certains (mais pas tous) des défauts de concurrence de CPython, mais comme je l'ai pas utilisé, je ne peux vraiment conseiller à ce sujet.

Je ne pense pas que l'argument est sur le choix de la langue ou le typage statique ou dynamique - il est entre deux modèles de la concurrence - mémoire partagée et le passage de messages. Quel modèle est plus logique dans votre situation et que votre langue choisie vous permet de faire un choix ou êtes-vous obligé d'adopter un modèle sur l'autre?

Pourquoi ne pas jeter un oeil à Erlang (qui a typage dynamique) et le passage de message , modèle Acteur , et lire pourquoi Joe Armstrong n'aime pas la mémoire partagée . Il y a aussi une discussion intéressante sur Java en utilisant concurrency serrures et fils ici sur le SO .

Je ne sais pas Python, mais Java, ainsi que le modèle et les fils serrures encastrables, a un cadre de passage de mesasge appelé Kilim .

Si pas Java / Python j'aller pour un langage fonctionnel depuis sa prise des effets secondaires en compte est l'une des complexités de l'écriture de logiciels en même temps. (En ce qui concerne votre question va: celui-ci se trouve être typé statique, mais le compilateur inférer la plupart du temps)

Personnellement, je choisirais F #, depuis que je l'ai vu beaucoup de beaux exemples de l'écriture de logiciels en même temps avec la facilité de l'utiliser.

En guise d'introduction: cet homme est tout aussi amusant que source d'inspiration , même doit avoir vu si vous n'êtes pas intéressé par F #, afin que jamais.

J'utiliser Java, via Jython. Java a de fortes capacités de fil, et il peut être écrit en utilisant la syntaxe Python avec Jython, donc vous avez obtenu le meilleur des deux mondes.

Python lui-même est pas vraiment bien avec la concurrence, et est plus lent que Java de toute façon.

Mais si vous avez des problèmes de concurrence et les mains libres, je jeter un oeil à Erlang parce qu'elle a été conçue pour de tels problèmes. Bien sûr, vous devez considérer Erlang seulement si vous avez:

  • le temps de maîtriser un (très) nouvelle technologie
  • le contrôle sur une partie raisonnable de la chaîne de production, depuis Erland besoin de quelques adaptations dans votre boîte à outils pour adapter

Ni. La programmation concurrente est notoirement difficile d'obtenir correcte. Il y a la possibilité d'utiliser un langage de programmation orienté processus comme occam-pi qui est basé à l'idée de processus séquentiels communiquant et calcul pi . Cela permet à la compilation pour vérifier l'impasse et de nombreux autres problèmes qui se posent au cours du développement des systèmes concurrents. Si vous n'aimez pas occam-pi, ce que je ne peux pas vous blâmer si vous ne faites pas, vous pouvez essayer aller la nouvelle langue de Google, qui met également en œuvre une version du CSP.

Pour certaines tâches, Python est trop lent. Votre programme en Java de fil pourrait être plus rapide que la version concurrente de Python sur un ordinateur multi-core ...

Je voudrais utiliser Java ou Scala, F # ou tout simplement aller à C ++ (MPI et OpenMPI).

L'environnement Java (JVM + bibliothèques) est mieux que la concurrence (C) Python, mais le langage Java est nul. Je serais probablement aller avec une autre langue sur la machine virtuelle Java - Jython a déjà été mentionné, et Clojure et Scala ont tous deux un excellent support pour la concurrence.

Clojure est particulièrement bon - il supporte haute performance des structures de données persistantes, agents et logiciels transactionnels mémoire. Il est un langage dynamique mais vous pouvez lui donner des conseils de type pour obtenir des performances aussi bonnes que Java.

Regarder cette vidéo sur InfoQ par Richard Hickey ( créateur de Clojure) sur les problèmes avec les approches traditionnelles de la concurrence, et comment gère Clojure il.

Je regarde Objective-C et du Cadre Fondation. Asynchronous, la programmation concurrente est bien prévue.

Bien sûr, cela dépend de votre accès aux outils de développement d'Apple ou GnuStep, mais si vous avez accès à l'un, il est une bonne route à prendre avec la programmation concurrente.

La réponse est que cela dépend. Par exemple vous essayez de tirer profit de plusieurs noyaux ou CPUs sur une seule machine ou êtes-vous désireux de distribuer votre tâche à travers plusieurs machines? Quelle importance est la vitesse par rapport à la facilité de mise en œuvre?

Comme mentionné précédemment, Python a l'interprète de verrouillage global, mais vous pouvez utiliser le multitraitement . Notez que si Stackless est très cool, il Erlang ou Acteurs Scala .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top