Java-threads und die Anzahl der Kerne
Hatte ich nur eine kurze Frage, wie Prozessoren und threads arbeiten. Nach meinem aktuellen Verständnis, ein Kern kann nur 1 Prozess zu einer Zeit. Aber wir sind in der Lage erzeugen eines thread-pool(sagen wir 30) mit einer größeren Anzahl als die Anzahl der Kerne ist, das wir besitzen(sagen wir 4) und Sie gleichzeitig ausgeführt werden. Wie ist das möglich, wenn wir nur 4 Kerne? Ich bin auch in der Lage zu laufen meine 30 thread-Programm auf meinem lokalen Rechner und auch weiterhin die Durchführung von anderen Aktivitäten auf meinem computer wie z.B. Filme ansehen oder im internet surfen.
Ich habe irgendwo gelesen, dass das scheduling von threads Auftritt, und diese Art von gibt die illusion, dass diese 30 threads gleichzeitig ausgeführt werden, indem die 4 Kerne. Ist dies wahr und wenn ja, kann jemand erklären, wie das funktioniert und auch empfehlen ein paar gute Lektüre dazu?
Vielen Dank im Voraus für die Hilfe.
- Wow danke. All das sind so tolle Antworten, und das hat wirklich dazu beigetragen, das Verständnis dieses Thema besser.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Prozesse vs. Threads
In den alten Tagen, jeder Prozess genau einen thread der Ausführung, so dass Prozesse, die geplant wurden, auf die Kerne direkt (und in diesen alten Tagen, es war fast nur ein Kern zu planen, auf). Aber in Betriebssystemen, support-threading (die fast alle modernen Betriebssysteme), ist es threads, nicht Prozesse, die geplant sind. So für den rest dieser Diskussion sprechen wir ausschließlich über threads, und Sie sollten verstehen, dass jeder laufende Prozess hat einen oder mehrere threads.
Parallelität vs Parallelität
Wenn zwei threads ausgeführt werden in parallel, Sie sind beide mit gleichzeitig. Zum Beispiel, wenn wir zwei threads A und B, dann ist deren parallele Ausführung würde so Aussehen:
CPU 1: ------------------------->
CPU 2: B ------------------------->
Wenn zwei threads ausgeführt werden gleichzeitig, deren Ausführung überschneidungen. Überlappend geschehen kann in einer von zwei Möglichkeiten: entweder werden die threads gleichzeitig (d.h. parallel, wie oben), oder Ihre Ausführungen sind interleaved auf dem Prozessor, etwa so:
CPU 1: -----------> B ----------> Ein -----------> B ---------->
So, für unsere Zwecke, Parallelität kann gedacht werden als ein Spezialfall von Parallelität*
Planung
In diesem Fall, Sie können gleichzeitig ausgeführt werden, weil der CPU-scheduler ist was jeder einzelne von denen 30 threads Anteil der CPU-Zeit. Einige threads wird werden parallel ausgeführt (wenn du 4 Kerne, 4 threads laufen parallel zu irgendeiner Zeit), aber alle 30 threads gleichzeitig ausgeführt werden. Der Grund, warum können Sie dann gehen, spielen Sie Spiele oder surfen im web ist, dass diese neue threads Hinzugefügt werden, um die thread-pool/queue und erhält auch einen Anteil der CPU-Zeit.
Logische vs. Physische Kerne
Dies ist nicht ganz wahr. Aufgrund der sehr cleveren hardware-design und pipelining, das wäre viel zu lang, um hier (und ich verstehe es nicht), ist es möglich, für einen physischen Kern, um tatsächlich ausgeführt werden zwei völlig unterschiedliche threads zur gleichen Zeit. Kauen über diesen Satz ein wenig, wenn Sie brauchen, um-es bläst noch meine Meinung.
Diese erstaunliche Leistung wird aufgerufen, simultanes multi-threading (oder im Volksmund Hyper-Threading, obwohl das eine geschützte Bezeichnung für eine bestimmte Instanz dieser Technologie). Also, wir haben physische Kerne, die die tatsächlichen hardware-CPU-Kerne, und logische Kerne, der die Anzahl der Kerne teilt das Betriebssystem die software ist verfügbar für die Verwendung. Logische Kerne sind im wesentlichen eine Abstraktion ist. Im typischen modernen Intel-CPUs, jeder physische Kern fungiert als zwei logische Kerne.
Ich würde empfehlen Betriebssystem-Konzepte wenn Sie wirklich wollen, um zu verstehen, wie Prozesse, threads und scheduling-alle arbeiten zusammen.
Kurz gesagt, Ihr Verständnis von einem Kern richtig ist. Ein Kern ausführen kann, 1 thread (aka-Prozess) zu einer Zeit.
Jedoch Ihr Programm nicht wirklich laufen 30 threads auf einmal. Von diesen 30 threads, nur 4 sind zu einem Zeitpunkt ausgeführt, und die anderen 26 warten. Die CPU wird zu planen threads und gibst jedem thread eine Zeitscheibe zur Ausführung auf einem Kern. Also die CPU wird alle threads abwechselnd laufen.
Ein häufiges Missverständnis:
FALSCH: Mit mehr Fäden NICHT immer damit das Programm schneller laufen. Es bedeutet nur, die CPU hat mehr zu tun, schalten, und in der Tat, dass zu viele threads machen Ihr Programm ausführen langsamer, weil der overhead, verursacht durch den Wechsel aus all den verschiedenen Prozessen.
Java nicht ausführen Thread scheduling, es läßt dies auf Betriebssystem durchführen, Thread-scheduling.
Für rechenintensive Aufgaben, Es wird empfohlen, mit thread-pool-Größe entspricht der Anzahl der verfügbaren Kerne. Aber für I/O-gebundene Aufgaben, die wir haben sollten größere Anzahl von threads. Es gibt viele andere Variationen, wenn beide Arten von Aufgaben stehen zur Verfügung und benötigt CPU-Zeitscheibe.
Ja, aber Sie können Multitasking und erstellen Sie eine illusion, dass Sie verarbeitet werden, mehr als einen Prozess gleichzeitig
Dies ist möglich durch die multitasking (das ist Parallelität). Können sagen, Sie begann 30 threads und OS ist auch 50 threads, die alle 80 threads teilen sich 4 CPU-Kerne, die durch die erste CPU-Zeitscheibe, one by one (ein thread pro Kern gleichzeitig). Was bedeutet, dass im Durchschnitt jeder Kern läuft 80/4=20 threads gleichzeitig. Und Sie fühlen sich alle threads/Prozesse gleichzeitig ausgeführt werden.
All dies geschieht auf OS-Ebene. Wenn Sie ein Programmierer sind, dann sollten Sie nicht zu kümmern. Aber wenn Sie ein student sind, der OS wählen Sie dann ein OS-Buch - & erfahren Sie mehr über Multi-threading auf OS-Ebene im detail oder finden Sie einige gute Forschung Papier für die Tiefe. Eine Sache, die Sie sollten wissen, dass jedes OS verarbeiten diese Dinge auf verschiedene Art und Weise (aber in der Regel Konzepte sind die gleichen)
Gibt es einige Sprachen, wie Erlang, die den Einsatz von green-threads (oder Prozesse), durch die Sie die Möglichkeit, anzeigen und planen von threads, die auf Ihrer eigenen Beseitigung OS. Also, tun Sie etwas Forschung auf green threads, wenn Sie interessiert sind.
Hinweis: Sie können auch die Forschung auf Akteure die anderen Abstraktion über threads. Sprachen wie Erlang, Scala usw. Schauspieler, um Aufgaben zu erledigen. Ein thread kann hundert Akteure; jeder Schauspieler ausführen kann unterschiedliche Aufgaben (ähnlich wie threads in java).
Dies ist eine sehr große und aktive Forschung Thema und es gibt viele Dinge zu lernen.