Hat Java Unterstützung für Multicore-Prozessoren / Parallelverarbeitung?
Ich weiß, dass jetzt, dass die meisten Prozessoren zwei oder mehr Kerne, multicore-Programmierung ist in aller Munde. Ist es, die Funktionalität zu nutzen, dies in Java? Ich weiß, dass Java eine Thread-Klasse, aber ich weiß auch, diese wurde um eine lange Zeit, bevor die multicores populär wurde. Wenn ich nutzen können mehrere Kerne in Java, welche Klasse/Technik sollte ich verwenden?
InformationsquelleAutor der Frage Rafe Kettler | 2010-07-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja. Es wurde auch eine Plattform für andere Programmiersprachen, in denen die Umsetzung nun ein "true " multithreading" oder "real-threading" - Verkaufsargument. Die G1 Garbage Collector eingeführt, in neueren Versionen auch die Nutzung von multi-core-hardware.
Java Concurrency in der Praxis
Versuchen, erhalten Sie eine Kopie des Java Concurrency in Practice Buch.
java.util.concurrent
Vollzieher
Executor
ist eine einfache, standardisierte Schnittstelle für die Definition von benutzerdefinierten thread-wie-Subsysteme, einschließlich der thread-pools, asynchrone IO und leichte Aufgabe frameworks.Warteschlangen
Java.util.gleichzeitige
ConcurrentLinkedQueue
Klasse liefert eine effiziente, skalierbare thread-sicher nicht-blockierende FIFO-Warteschlange.Timing
Den
TimeUnit
Klasse bietet mehrere granularities (einschließlich Nanosekunden) für die Angabe und controlling-time-out-Vorgänge. Die meisten Klassen in dem Paket enthalten Vorgänge, basierend auf time-outs zusätzlich zu unbestimmte wartet.Synchronizer
Vier Klassen gemeinsame Hilfe für Besondere Zwecke, die Synchronisation Idiome.
Semaphore
ist ein klassisches concurrency-tool.CountDownLatch
ist eine sehr einfache, aber sehr Häufig Dienstprogramm für die Sperrung, bis eine gegebene Anzahl von Signalen, Ereignissen oder Bedingungen halten. [...]Concurrent Collections
Neben Warteschlangen, dieses Paket liefert ein paar Collection-Implementierungen konzipiert für die Verwendung in Multithread-Kontext:
ConcurrentHashMap
CopyOnWriteArrayList
undCopyOnWriteArraySet
.Dies kommt auch in praktisch, wenn Sie mit der Anzahl der threads die Anzahl der verfügbaren CPUs zum Beispiel:
InformationsquelleAutor der Antwort bakkal
In den meisten Java-Implementationen, die Sie sich verlassen können Java-threads als echte OS-threads. Als ein Ergebnis, das Betriebssystem wird dafür Sorge trägt, dass die Arbeitslast verteilt sich über mehrere Kerne, wenn Sie die Thread-Klasse.
Betriebssystem-threads pre-date commodity multicore-Systemen eine lange Zeit, das ist also kein Problem, wirklich. Der einzige Unterschied multicore-Systemen gemacht wurde, um die Zeit-Multiplex-Betriebssystem-threads ausgeführt werden, wie wirklich gleichzeitige threads auf mehrere Kerne.
InformationsquelleAutor der Antwort Gian
Java 5 eingeführt, die java.util.concurrent-Paket, das hilft in dem Gebäude gleichzeitige Anwendungen, die profitieren von multicore-Systemen. Dieses Paket geht weit über die multithreading-Funktionalität in Java 1.4 und früher (wie synchronized, wait, notify, etc.).
Gibt es einen Vorschlag für Java 7 enthalten die Fork/Join Rahmen zur Nutzung von multicore-Systeme erleichtert.
InformationsquelleAutor der Antwort Richard Kettelerij
Finden Sie neue Funktionalität in Ateji PX, eine Erweiterung der Sprache Java mit parallel primitives inspiriert von den pi-Kalkül. Ganz anders von der thread-Programmierung und alles was thread basiert (Aufgaben, Gerichtsvollzieher, etc).
Parallelität eingeführt, die sich auf diese Weise auf die Sprache, Niveau, im Gegensatz zu threading-Bibliotheken, die APIs Zugang zu einem meist hardware-level-Konzept macht die multicore-Programmierung viel einfacher und intuitiver.
Es ist ein radikal neuer Ansatz für die parallele Programmierung lesenswert über (disclaimer: ich bin der designer von Ateji PX). Das whitepaper ist hier : http://www.ateji.com/px/whitepapers/Ateji%20PX%20for%20Java%20v1.0.pdf.
InformationsquelleAutor der Antwort Patrick Viry
Ja. Java bietet concurrent-API zu bedienen, um die Vorteile von multi-core-Prozessoren der Maschine.
Erhalten Sie verfügbare Prozessoren Graf von Laufzeit und Nutzung, Graf zu erstellen ExecutorService durch viele APIs in Vollzieher.
Können Sie auch ThreadPoolExecutor - API, um das gleiche zu erreichen.
Java 8 stellt eine weitere API : newWorkStealingPool, die ForkJoinPool durch die Nutzung aller verfügbaren Prozessoren. Sie nicht haben, um pass-Prozessor zählen als parameter.
Haben Sie einen Blick auf Beispiel-code:
Haben Sie einen Blick auf Verwandte SE Frage Recht Vollzieher:
Java Fork/Join vs ExecutorService - Wann verwendet man welchen?
InformationsquelleAutor der Antwort Ravindra babu