Python vs. Java - die Sie gleichzeitige Programmierung zu tun und warum wählen würden? [geschlossen]

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

Frage

Auch wenn nicht Python oder Java, dann würden Sie generell eine statisch typisierte Sprache oder eine dynamisch-Typ Sprache auswählen?

War es hilfreich?

Lösung

würde ich die JVM über Python wählen, vor allem weil Multi-Threading in Python durch die Globaler Interpreter Lock . Allerdings ist Java unwahrscheinlich, Ihr Beste sein, wenn auf der JVM ausgeführt wird. Clojure oder Scala (mit Schauspielern) beide wahrscheinlich geeignet, um besser auf Multi-threaded-Probleme.

Wenn Sie Java wähle sollten Sie die Nutzung des betrachten synchronisiert java.util.concurrent Bibliotheken und vermeiden>.

Andere Tipps

Stackless Python ! Dass eine Python-Variante vor allem für die Parallelität gemacht.

Aber am Ende kommt es auf der Zielplattform und was Sie versuchen zu erreichen.

Für Gleichzeitigkeit würde ich Java verwenden. Durch die Verwendung von Java, meine ich eigentlich Scala , die eine Menge von Erlang Gleichzeitigkeit Konstrukte leiht, ist aber (wahrscheinlich ) besser zugänglich zu einem Java-Entwicklern, die auch nie zuvor verwendet hat.

Python Threads leidet für den Global Interpreter Lock zu warten, true Parallelität zu machen (in einem einzigen Prozess) unerreichbare für CPU-gebundenen Programme. Wie ich verstehe, löst Stackless Python einige (aber nicht alle) CPython der Gleichzeitigkeit Mängel, aber als ich es nicht benutzt haben, kann ich nicht wirklich auf sie beraten.

Ich glaube nicht das Argument über die Sprache Wahl ist oder statische oder dynamische Typisierung - es ist zwischen zwei Modellen von Gleichzeitigkeit - Shared Memory und Message-Passing. Welches Modell macht in Ihrer Situation mehr Sinn und nicht gewählte Sprache ermöglicht es Ihnen, eine Wahl zu treffen oder sind Sie ein Modell über die andere zu übernehmen gezwungen?

Warum haben Sie einen Blick nicht unter Erlang (die dynamische Typisierung hat) und message passing , a href = das < "http://en.wikipedia.org/wiki/Actor_model" rel =" nofollow noreferrer "> Schauspieler Modell , und lesen Sie, warum Joe Armstrong mag nicht gemeinsam benutzten Speicher . Es gibt auch eine interessante Diskussion über Java Concurrency mit Schlössern und Themen hier auf SO .

Ich weiß nicht, über Python, aber Java, zusammen mit den eingebauten Schlössern und Fäden Modell, hat einen mesasge Gang Rahmen genannt Kilim .

Wenn nicht Java / Python ich für eine funktionale Sprache gehen würde , da Nebenwirkungen unter Berücksichtigung eines von der Komplexität der gleichzeitigen Schreiben von Software. (Soweit Ihre Frage geht: Dieses geschieht statisch typisierten sein, aber Compiler die meiste Zeit infered)

Persönlich würde ich F # holen, da ich viele schöne Beispiele für das Schreiben gleichzeitig Software mit Leichtigkeit es mit je gesehen habe.

Als Einleitung: Dieser Mann ist gleichermaßen Spaß als inspirierendes selbst hat ein muss gesehen, wenn Sie in F # nicht daran interessiert sind, was so überhaupt.

Ich würde verwenden Java, über Jython. Java hat starke Thread-Fähigkeiten, und es kann mit der Python-Syntax mit Jython geschrieben werden, so bekam man das Beste aus beiden Welten.

Python selbst ist nicht wirklich gut mit Nebenläufigkeit und ist langsamer als Java sowieso.

Aber wenn Sie Parallelitätsprobleme und die Hände frei haben, würde ich einen Blick auf Erlang hat, weil es Design für solche Probleme gewesen. Natürlich müssen Sie Erlang betrachten nur, wenn Sie:

  • Zeit, um eine (sehr) neue Technologie
  • zu meistern
  • Kontrolle auf einem angemessenen Teil der Produktionskette, da Erland einige Anpassungen in der Toolbox müssen passen

Weder noch. Die gleichzeitige Programmierung ist notorisch schwer korrekt zu erhalten. Es besteht die Möglichkeit, einen prozessorientierten Programmiersprache wie occam-pi die basiert von der Idee der sequentielle Prozesse Kommunikation und die pi Kalkül . Dies ermöglicht es Zeit für die Überprüfung Deadlock und viele andere Probleme erstellen, die während der gleichzeitigen Entwicklung der Systeme entstehen. Wenn Sie nicht occam-pi mag, was ich kann Ihnen die Schuld, wenn Sie nicht, Sie könnten versuchen, gehen Sie die neue Sprache von google, die auch eine Version von CSP implementiert.

Für einige Aufgaben ist Python zu langsam. Ihr einziger Thread Java-Programm könnte schneller sein als die gleichzeitige Version von Python auf einem Multi-Core-Computern ...

Ich möchte Java oder Scala, F # verwenden, oder einfach, um C ++ zu gehen (MPI und OpenMPI).

Die Java-Umgebung (JVM + Bibliotheken) ist besser für die Gleichzeitigkeit als (C) Python, aber Java die Sprache saugt. Ich würde wahrscheinlich mit einer anderen Sprache auf der JVM gehen - Jython ist bereits erwähnt worden, und Clojure und Scala beide haben eine hervorragende Unterstützung für Parallelität.

Clojure ist besonders gut - es Unterstützung für Hochleistungs-persistente Datenstrukturen hat, Agenten und Software Transactional Memory. Es ist eine dynamische Sprache, aber man kann es Hinweise geben, geben Sie die Leistung so gut wie Java zu erhalten.

Sehen Sie diesem Video auf InfoQ von Richard Hickey ( Schöpfer von Clojure) über die Probleme mit traditionellen Ansätzen in der Parallelität und wie Clojure behandelt es.

ich bei Objective-C und die Stiftung Rahmen aussehen würde. Asynchron, parallele Programmierung ist gut versorgt.

Das hängt natürlich von Ihrem Zugriff auf Apple Developer Tools oder GNUstep, aber wenn Sie den Zugriff auf entweder einen haben es ist eine gute Strecke mit gleichzeitiger Programmierung zu nehmen.

Die Antwort ist, dass es abhängig ist. Zum Beispiel versuchen Sie die Vorteile von mehreren Kernen oder CPUs auf einer einzigen Maschine zu nehmen oder sind Sie wollen Ihre Aufgabe in vielen Maschinen verteilen? Wie wichtig ist die Geschwindigkeit vs. einfache Implementierung?

Wie bereits erwähnt, hat Python den Global Interpreter Lock, aber man könnte die Multiprozessing Modul. Beachten Sie, dass während Stackless ist sehr cool, es Erlang oder Scala Schauspieler .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top