2008-09-15 8 views
1

Es gibt verschiedene Dokumente, die das Threading unter Solaris/Linux beschreiben, aber jetzt wo die Windows-Implementierung beschrieben wird. Ich habe ein flüchtiges Interesse daran, es scheint seltsam, dass etwas so Kritisches (scheinbar) nicht dokumentiert ist.Gibt es eine Spezifikation von Java-Threading-Modell unter Windows XP überall verfügbar?

Das Threading ist nicht auf verschiedenen Betriebssystemen gleich - "Einmal schreiben, Anywhere ausführen" ist nicht korrekt für Threading.

Siehe http://java.sun.com/docs/hotspot/threads/threads.html

Antwort

0

Das fragliche Dokument des Solaris-Threading-Modell diskutiert und wie die VM-Karten zu. Das hat nichts mit Linux zu tun. Außerdem behandelt das Dokument nur die Leistung. Das allgemeine Verhalten des Programms sollte sich nicht ändern, egal was Sie wählen.

Das exponierte Threading-Modell von Java ist auf allen Plattformen gleich und in den Java-Spezifikationen definiert. Für eine Java-Anwendung sollte das zugrunde liegende Betriebssystem sogar für das Threading vollständig transparent sein.

Wenn Sie jedoch wissen müssen ... Die Sun JVM ordnet ihre Threads 1: 1 zu Windows-Threads zu. Es verwendet nicht mehrere Prozesse oder Fasern.

-1

Dieses Dokument ist ein wenig mehr über Solaris-Threading als das Java-Threading-Modell. Alle JVMs rufen die native Thread-API des Betriebssystems auf, für das sie geschrieben wurden, daher gibt es immer einen Java-Thread für einen OS-Thread. Das Diagramm im Dokument zeigt, dass sich die Threads erst ändern, wenn sich die Threads im OS-Bereich befinden. Jedes Betriebssystem kann Threads auf verschiedene Arten für Windows-spezifische Dokumentation behandeln hier ist ein guter Ausgangspunkt: MSDN About Processes and Threads.

Lange Zeit haben verschiedene Geschmacksrichtungen von * nix ihre Threads mit Prozessen statt tatsächlichen Threads implementiert. Es scheint, dass diese spezifischen Optimierungsparameter den Übergang zu einem neueren Threading-Modell in Solaris erleichtern. Dadurch wurden das ältere Modell und diese JVM-Optionen überflüssig. Eine Liste der JVM-Optionen für die HotSpot JVM finden Sie unter HotSpot VM Options. Viele davon sind nützlich, um lang laufende Anwendungen zu optimieren, aber Sie können auch Probleme damit bekommen, wenn Sie nicht verstehen, was sie tun. Bedenken Sie auch, dass jede Implementierung der JVM verschiedene Optionen haben kann, die Sie auf der IBM VM oder BEA nicht finden können.

2

Es hängt wirklich von der spezifischen JVM-Implementierung ab. Ich nehme an, Sie wundern sich über Suns Windows JVM, und ich kann Ihnen mit Sicherheit sagen, dass die Sun JVM einen Java-Thread einem OS-Thread zuordnet.

Sie könnten versuchen, ein paar Threads aus Java-Code zu spawnen, Task-Manager öffnen und sehen, was passiert ist.

3

Um Ihre Frage am direktesten zu beantworten, wird die präzise Semantik, wie Threads implementiert werden, bewusst undefiniert durch die JVM-Spezifikation.

FWIW, Sebastions Aussage, dass "Java exponiertes Threading-Modell auf jeder Plattform gleich ist und in den Java-Spezifikationen definiert ist. Zu einer Java-Anwendung sollte das zugrundeliegende Betriebssystem sogar für Threading völlig transparent sein", ist ungenau.

Ich habe signifikante empirische Unterschiede zwischen Threading unter Windows und Linux in Bezug auf Thread-Verhungern mit Wait/Notify gefunden. Linux ist deutlich anfälliger für Hunger, wenn die vielen Threads für eine einzige Sperre kämpfen - in dem Maße, dass ich 3 Größenordnungen mehr Threads in Windows zu verhungern als in Linux laden musste.Bei stark beanspruchten Sperren werden die Java-Parallelitätsperren mit einem fairen Modifizierer kritisch.

Zahlen zu verdeutlichen, hatte ich Probleme unter Linux mit einer Sperre stark von 31 Fäden behauptete, wo der gleiche Code unter Windows 10000 erforderlich (ja, das ist 10) Threads beginnen Hungerprobleme zu demonstrieren.

Zu allem Überfluss gab es unter Linux 3 verschiedene Threading-Modelle, von denen jedes unterschiedliche Eigenschaften hat.

Meistens war Threading nach meiner Erfahrung transparent, aber Streitfragen verdienen sorgfältige Prüfung.