Frage

Ich habe eine kleine Python-Anwendung geschrieben und hier kann man sehen, wie Task-Manager während einer typischen Run aussieht.
(Quelle: weinzierl.name )

Während die Anwendung perfekt multithreaded, wenig überraschend verwendet es nur einen CPU-Kern. Unabhängig von der Tatsache, dass die meisten modernen Skriptsprachen Multithreading unterstützen, Scripts kann einen CPU-Kern laufen nur .

Ruby, Python, Lua, PHP alles kann nur auf einem einzigen Kern laufen. Auch Erlang, die für die gleichzeitige Programmierung besonders gut sein, gesagt wird, ist davon betroffen.

Gibt es eine Skriptsprache, die in gebaut Unterstützung für Threads, die auf einen einzelnen Kern nicht beschränkt sind?

WRAP UP

Antworten waren nicht ganz das, was ich erwartet hatte, aber die TCL Antwort nahe kommt. Ich möchte perl hinzufügen, die (ähnlich wie TCL) Interpreter-basierte Themen hat.

Jython, Ironpython und Groovy fallen unter dem Dach einer bewährten Sprache mit der Kombination von bewährten virtuelle Maschine in einer anderen Sprache. Vielen Dank für Ihre Hinweise in diesem Richtung.

Aiden Bell Antwort als < em> akzeptierte Antwort . Er bedeutet nicht, eine bestimmte Sprache aber seine Bemerkung war sehr aufschlussreich für mich.

War es hilfreich?

Lösung

Themen-Syntax kann statisch sein, aber die Umsetzung für alle Betriebssysteme und virtuelle Maschinen können sich ändern

Ihre Skriptsprache wahr Einfädeln auf ein O und fake-Threads auf einem anderen verwenden.

Wenn Sie die Leistungsanforderungen haben, könnte es lohnt ein Blick, um sicherzustellen, dass die scripted Fäden fallen bis in die vorteilhafteste Lage im Betriebssystem. User-Space-Threads schneller sein werden, aber für Thread-Aktivität Kernel-Threads weitgehend blockiert werden besser sein.

Andere Tipps

Sie scheinen eine Definition von „Skriptsprache“ verwenden, die ein paar Augenbrauen heben können, und ich weiß nicht, was das zu Ihren anderen Anforderungen impliziert.

Wie auch immer, haben Sie TCL in Betracht gezogen? Es wird tun, was Sie wollen, glaube ich.

Da Sie mit ziemlich allgemeinen Zwecken Sprachen in Ihrer Liste, ich weiß nicht, wie schwer eine Implementierung für Sie akzeptabel ist. Ich wäre überrascht, wenn eine der zig Scheme-Implementierungen nicht zu nativen Threads, sondern aus der Spitze von meinem Kopf, kann ich erinnere mich nur an die MzScheme gewöhnungs aber ich scheine Unterstützung zu erinnern fallen gelassen wurde. Sicherlich einige der Common Lisp-Implementierungen tun dies auch. Wenn Fähiges Common Lisp (ECL) der Fall ist, könnte es für Sie arbeiten. Ich werde es nicht verwenden, aber so bin ich nicht sicher, was der Staat es Threading-Unterstützung ist, und dies kann natürlich von Plattform.

Aktualisieren Auch wenn ich mich richtig erinnere, GHC Haskell tun nicht ganz, was Sie fordern, aber tun kann effektiv, was Sie wollen, da wieder, wie ich mich erinnere, ist es eines Spin wird native Thread pro Kern oder so und dann seine Fäden über diejenigen laufen ....

Sie können frei Multi-Thread mit dem Python Sprache in Implementierungen wie Jython (auf der JVM, wie @Reginaldo erwähnt Groovy ist) und Ironpython (auf .NET). Für die klassische CPython Implementierung der Python-Sprache, wie @ Dan Kommentar erwähnt, multiprocessing (statt threading) ist der Weg frei zu verwenden, wie viele Kerne wie Sie zur Verfügung haben

Wie Groovy auf der Java Virtual Machine basiert, Sie Unterstützung für echte Fäden erhalten.

F # auf .NET 4 hat eine hervorragende Unterstützung für die parallele Programmierung und extrem gute Performance sowie Unterstützung für .fsx Dateien, die für Scripting speziell darauf ausgelegt sind. Ich tue alle meine scripting F # verwendet wird.

Eine Antwort auf diese Frage wurde bereits angenommen, aber nur hinzufügen, dass neben tcl, die einzige andere interpretierte Skriptsprache, die ich kenne, unterstützt Multithreading und Thread-sichere Programmierung ist Qore .

Qore wurde vom Boden entwickelt, um Multithreading zu unterstützen; jeder Aspekt der Sprache ist threadsicher; die Sprache wurde entwickelt, SMP Skalierbarkeit und Multithreading nativ zu unterstützen. Zum Beispiel können Sie den background Operator einen neuen Thread oder die ThreadPool Klasse zu starten, einen Pool von Threads zu verwalten. Qore auch Ausnahmen mit rotem Faden Fehlern werfen, so dass threading Fehler (wie mögliche Deadlocks oder Fehlern mit APIs Einfädeln wie der Versuch, eine Sperre zu greifen, die bereits von dem aktuellen Thread gehalten wird) sind sofort sichtbar für den Programmierer.

Qore unterstützt zusätzlich und Faden Ressourcen; beispielsweise wird eine DatasourcePool Zuweisung als gewinde lokale Ressource behandelt wird; wenn Sie vergessen hat, eine Transaktion zu begehen oder Rollback, bevor Sie Ihren Thread zu beenden, wird die Thread-Ressource für die DatasourcePool Klasse Handling rollt die Transaktion automatisch und wirft eine Ausnahme mit benutzerfreundlichen Informationen über das Problem zurück und wie es gelöst wurde.

Vielleicht könnte es für Sie nützlich sein - ein Überblick über Qore-Funktionen ist hier:

CSScript in Kombination mit Parallel Extensions keine schlechte Wahl sein sollte. Sie schreiben Ihren Code in reinem C # und dann als Script ausführen.

Es ist nicht auf den Fädelmechanik verwendet. Das Problem ist, dass (zB in Python) Sie Interpreter-Instanz bekommen haben das Skript auszuführen. Zum Erwerb des Interpreters Sie es zu sperren haben, wie es geht den Referenzzähler und etc zu halten und müssen gleichzeitig Zugriff auf diese Objekte zu vermeiden. Python verwendet Pthread und sie sind echte Threads, aber wenn man mit Python Objekten arbeiten nur ein Thread eine andere zu warten läuft. Sie nennen diese GIL (Global Interpreter Lock) und es ist das Hauptproblem, das wirkliche Parallelität unmöglich innerhalb eines Prozesses macht.

https://wiki.python.org/moin/GlobalInterpreterLock

Die anderen Skriptsprachen Art das gleiche Problem haben.

Guile unterstützt POSIX-Threads, die ich glaube, sind Hardware-Threads.

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