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.
Ä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.
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 .
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.
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:
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.
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.
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.
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).
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)
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.
Tags und Links multithreading programming-languages