Grüne Threads gegen nicht grüne Threads
Jungs ich will zu verstehen, die Vorteile, die diese Art von threads.
- Was Umwelt Green Threads ist besser als Nicht Grün ? Einige sagen, green-threads sind besser für multi-core-Prozessor.
- Erwartete Verhalten Probleme.
InformationsquelleAutor der Frage Dead Programmer | 2011-04-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wikipedia-Artikel Green Threads erklärt es sehr gut.
Green threads "user-level-threads". Sie planen einen "normalen" user-level-Prozess, nicht vom kernel. So können Sie verwendet werden, um zu simulieren, multi-threading auf Plattformen, bieten nicht die Fähigkeit.
Im Kontext von Java-spezifisch, green-threads sind eine Sache der Vergangenheit. Sehen dieser Artikel. (Es geht um Solaris, aber die Tatsache, dass die grünen Fäden sind nicht mehr gültig für die üblichen Plattformen).
Green threads wurden aufgegeben, die in der Sun JVM für Linux ab der version 1.3 (siehe Java[tm] - Technologie auf der Linux-Plattform auf archive.org). Das geht zurück bis 2000. Für Solaris-native threads verfügbar ab JDK 1.2. Das reicht zurück bis 1998. Ich don ' T denke sogar, dass es jemals ein green-thread-Implementierung für Windows, aber ich kann nicht finden, einen Verweis.
Gibt es einige Ausnahmen, wie schon in dem Wikipedia-Artikel entnehme ich meist für low-power - (eingebettete) Geräte.
InformationsquelleAutor der Antwort Mat
Green threads threads implementiert, die auf der Anwendungsebene statt in der OS. Dies geschieht normalerweise, wenn der OS nicht eine thread-API, oder es nicht funktioniert, wie Sie es brauchen.
So, der Vorteil ist, dass Sie thread-wie-Funktionalität. Der Nachteil ist, dass green threads können eigentlich nicht mehrere Kerne.
Gab es ein paar frühe JVMs, die verwendet werden green threads (IIRC die Blackdown-JVM, port für Linux getan haben), aber heutzutage ist es alle gängigen JVMs verwenden echte threads. Es kann einige embedded-JVMs, die noch mit grünen Fäden.
InformationsquelleAutor der Antwort Michael Borgwardt
Grüne Faden Arbeitsspeicher zugewiesen wird, aus dem Haufen, anstatt einen stack erstellt für Sie durch das OS. Dies kann möglicherweise geben eine Größenordnung oder mehr zu erhöhen bei gleichzeitiger threads. Wie andere erwähnt haben, dies würde nicht die Vorteile von mehreren Prozessoren automatisch, aber der Anwendungsfall ist in der Regel für das blockieren von I/O -- z.B. green threads, die es erlauben würde, Sie zu handhaben, 100 gleichzeitige verbindungen, im Gegensatz zu 10k.
So, in anderen Worten, green-threads sind besser für IO-Operationen gebunden an einen bestimmten Maßstab.
InformationsquelleAutor der Antwort Yike Lu
Grünen Fäden sind deutlich schneller als native threads, wenn mehr aktive threads als Prozessoren.
Java zunächst hatte die Unterstützung für green-threads, aber im Gegensatz zu den meisten modernen green-threading-Implementierungen, könnte es nicht die Skalierung über mehrere Prozessoren, so dass Java nicht nutzen mehrere Kerne.
Dann Java entfernt grüne threading, um zu verlassen Sie sich nur auf native threads. Gemacht, dass Java-Threads langsamer als green threads.
Bitte beachten Sie, dass ich bin nicht speziell reden über die Java-Implementierung der green-threads an, die haben Nachteile, da es im Gegensatz zu anderen grünen Faden Folgen konnte keine Skala in einem multicore-oder Multiprozessor-system.
InformationsquelleAutor der Antwort user1657170
Green threads sind nicht geplant, die durch das OS.
Das bedeutet, dass die Planung für Sie geschieht in userspace und ist nicht behandelt, durch den kernel. Dies bedeutet, dass die grünen Fäden können in der Regel nicht gemacht werden für die Nutzung aller CPU-Kerne.
Für alle mainstream-Plattform mit Java in diesen Tagen (zB x86 oder x64), Sie werden mit echten threads.
InformationsquelleAutor der Antwort kittylyst
Green threads sind user-level-threads eher als kernel-level-threads. Sie sind geplant von Benutzer-Bibliotheken eher als der kernel. Sie können Ihr eigenes scheduling-Mechanismus zu planen threads anstatt sich auf den OS-scheduler.
Green threads emulieren Multithread-Umgebungen, ohne sich auf eine native OS-Fähigkeiten, und Sie verwaltet im Userspace statt kernel-space, damit Sie die Arbeit in einer Umgebung, die keine native thread-Unterstützung
Leistung :
Auf einem multi-core-Prozessor, native thread-Implementierungen kann die automatische Zuweisung der Arbeit auf mehrere Prozessoren, in der Erwägung, dass green-thread-Implementierungen in der Regel nicht.
Green threads deutlich stärker als native Linux-threads auf thread-Aktivierung und Synchronisation.
Wenn ein green-thread einen blockierenden Systemaufruf ist nicht nur, dass der thread gesperrt, aber alle threads innerhalb des Prozesses blockiert werden.
InformationsquelleAutor der Antwort Aniket Thakur
JAVA-Multi-Threading wird implementiert, indem zwei Modelle:
Green-Thread-Modell: Der Thread geführt wird durch die JVM, ohne die zugrunde liegende Betriebssystem-Unterstützung ist als Grüne Faden. Sehr wenige-Betriebssystem wie Sun Solaris-Unterstützung für green-thread-Modell. Es ist veraltet und wird nicht empfohlen zu verwenden.
Native OS-Modell: Der Thread manged durch die JVM mit Hilfe des zugrunde liegenden OS " Native OS-Modell. Alle windows OS-Unterstützung für die native OS-Modell.
InformationsquelleAutor der Antwort Raman Gupta