Welche Hochsprachen unterstützen Multithreading?

7

Ich frage mich, welche Sprachen natives Multithreading unterstützen (oder nicht unterstützen) und vielleicht einige Details über die Implementierung erhalten. Hoffentlich können wir einen vollständigen Überblick über diese spezielle Funktionalität erstellen.

    
bmdhacks 26.09.2008, 17:04
quelle

14 Antworten

6

Erlang hat integrierte Unterstützung für gleichzeitige Programmierung .

Streng genommen sind Erlang-Prozesse Grünlinge. Aber die Sprache und die virtuelle Maschine sind von Grund auf so konzipiert, dass sie Nebenläufigkeit unterstützen. Die Sprache verfügt über spezifische Kontrollstrukturen für die asynchrone Kommunikation zwischen Prozessen.

In Python ist greenlet ein Paket von Drittanbietern, das einfache Threads und channel-basiertes Messaging bietet. Aber es ist nicht vergleichbar mit Erlang.

    
ddaa 26.09.2008 17:21
quelle
4

Ältere Versionen von C und C ++ (nämlich C89, C99, C ++ 98 und C ++ 03) haben überhaupt keine Unterstützung in der Kernsprache, obwohl Bibliotheken wie POSIX-Threads für so ziemlich jede Plattform verfügbar sind im allgemeinen Benutzer heute.

Die neuesten Versionen von C und C ++, C11 und C ++ 11 haben eine integrierte Threading-Unterstützung in der Sprache, aber es ist eine optionale Funktion von C11, sodass Implementierungen wie Single-Core-Embedded-Systeme dies nicht tun können unterstütze es und unterstütze den Rest von C11, wenn sie es wünschen.

    
Adam Rosenfield 26.09.2008 17:08
quelle
3

Ich nehme an, dass die Liste der Sprachen, die höher als Haskell sind, ziemlich kurz ist, und sie hat ziemlich gute Unterstützung für Parallelität und Parallelität .

    
Chris Vest 27.09.2008 08:12
quelle
3

Bei CPython muss man sich an die GIL erinnern. Zusammenfassend: Nur ein Prozessor wird verwendet, selbst auf Multiprozessor-Maschinen. Es gibt mehrere Möglichkeiten, wie der Kommentar zeigt.

    
Adriano Varoli Piazza 26.09.2008 17:13
quelle
2

Delphi / FreePascal unterstützt auch Threads.

Ich nehme an, dass es auf anderen Windows-Plattformen nur nativ ist.

Einige nette Bibliotheken, die bessere Funktionen auf dem TThread-Objekt implementieren:

Gustavo Carreno 26.09.2008 17:22
quelle
2

Diese Frage macht keinen Sinn: Ob eine bestimmte Implementierung Threads als native Threads oder grüne Threads implementiert, hat nichts mit der Sprache zu tun, das ist ein internes Implementierungsdetail.

Es gibt Java-Implementierungen, die native Threads und Java-Implementierungen verwenden, die grüne Threads verwenden.
Es gibt Ruby-Implementierungen, die native Threads und Ruby-Implementierungen verwenden, die grüne Threads verwenden.
Es gibt Python-Implementierungen, die native Threads und Python-Implementierungen verwenden, die grüne Threads verwenden.
Es gibt sogar POSIX-Thread-Implementierungen, die grüne Threads verwenden, z. die alte LinuxThreads-Bibliothek oder die GNU pth-Bibliothek.

Und nur weil eine Implementierung native Threads verwendet, bedeutet dies nicht, dass diese Threads tatsächlich parallel ausgeführt werden können. Viele Implementierungen verwenden eine globale Interpretersperre, um sicherzustellen, dass nur ein Thread gleichzeitig ausgeführt werden kann. Auf der anderen Seite bedeutet die Verwendung von grünen Threads nicht, dass sie nicht parallel laufen können: Die BEAM Erlang VM zum Beispiel kann ihre grünen Threads (genauer grüne Prozesse) über mehrere CPU-Kerne planen, das gleiche ist für den Rubinius geplant Ruby VM.

    
Jörg W Mittag 28.09.2008 07:37
quelle
2

Clojure ist ein aufstrebender Lisp-Dialekt für die JVM, der speziell dafür entwickelt wurde, die Nebenläufigkeit gut zu handhaben.

Es verfügt über eine funktionale Stil-API, einige sehr effiziente Implementierungen von verschiedenen unveränderlichen Datenstrukturen und Agentensystem (bitähnliche Akteure in Scala und Prozesse in Erlang). Es hat sogar Software-Transaktionsspeicher.

Alles in allem ist Clojure sehr umfangreich, um Ihnen beim Schreiben von korrektem Multithread- und gleichzeitigem Code zu helfen.

    
Chris Vest 14.10.2008 12:57
quelle
1

Ich glaube, dass die offizielle Quietsch-VM keine nativen (OS) Threads unterstützt, aber die Gemstone-Version.

(Fühlen Sie sich frei, dies zu bearbeiten, wenn nicht korrekt).

    
Marcin 26.09.2008 17:08
quelle
1

Sie müssen in diesem Kontext "nativ" definieren.

Java beansprucht eine Art eingebautes Multithreading, basiert aber nur auf grobkörnigem Sperren und etwas Bibliotheksunterstützung. In diesem Moment ist es nicht mehr "nativ" als C mit den POSIX-Threads. Die nächste Version von C ++ (0x) enthält auch eine Threading-Bibliothek.

    
florin 26.09.2008 17:09
quelle
1

Ich weiß, dass Java und C # Multithreading unterstützen und dass die nächste Version von C ++ es direkt unterstützen wird ... (Die geplante Implementierung ist als Teil der boost.org Bibliotheken verfügbar ...)

    
Gert 26.09.2008 17:09
quelle
1

Boost :: thread ist großartig, ich bin mir nicht sicher, ob Sie können jedoch seinen Teil der Sprache sagen. Es hängt davon ab, ob Sie CRT / STL / Boost als Teil von C ++ oder als optionale Add-On-Bibliothek betrachten.

(sonst hat praktisch keine Sprache natives Threading, da sie alle ein Feature des Betriebssystems sind).

    
gbjbaanb 26.09.2008 17:10
quelle
1

Perl unterstützt native Threads nicht sinnvoll.

Ja, es gibt ein Perl-Thread-Modul, und ja, es verwendet native Plattform-Threads in seiner Implementierung. Das Problem ist, dass es im allgemeinen Fall nicht sehr nützlich ist.

Wenn Sie einen neuen Thread mithilfe von Perl-Threads erstellen, wird der gesamte Status des Perl-Interpreters kopiert. Dies ist sehr langsam und benötigt viel RAM. In der Tat ist es wahrscheinlich langsamer als mit fork () unter Unix, da letzteres Copy-on-Write und Perl-Threads nicht verwendet.

Aber im Allgemeinen hat jede Sprache ein eigenes Threading-Modell, einige unterscheiden sich von anderen. Python verwendet (hauptsächlich) native Plattform-Threads, verfügt jedoch über eine große Sperre, die sicherstellt, dass nur einer (Python-Code) gleichzeitig ausgeführt wird. Dies hat tatsächlich einige Vorteile.

Sind diese Tage nicht mehr Mode für Prozesse? (Denken Sie an Google Chrome, IE8)

    
MarkR 28.09.2008 08:09
quelle
1

Ich habe kürzlich eine Multithreading-Erweiterung für Lua gemacht, die Lua Lanes heißt. Es verbindet Multithreading-Konzepte so natürlich mit der Sprache, dass ich "eingebautes" Multithreading nicht besser finden würde.

Für die Aufzeichnung kann Lua's kooperatives Multithreading (Koroutinen) oft auch verwendet werden. Mit oder ohne Lanes.

Lanes hat keine GIL und führt Code in separaten Lua-Universen pro Thread aus. Wenn Ihre C-Bibliotheken nicht abstürzen, sind sie daher immun gegen die Probleme, die mit der Verwendung von Threads verbunden sind. Tatsächlich ähnelt das Konzept eher Prozessen und Nachrichtenübergabe, obwohl nur ein OS-Prozess verwendet wird.

    
akauppi 28.09.2008 09:00
quelle
0

Perl und Python tun. Ruby arbeitet daran, aber die Threads in Ruby 1.8 sind nicht wirklich Threads.

    
David Nehme 26.09.2008 17:09
quelle