Frage

Gibt es eine Bibliothek wie Intel TBB in Java, die Parallelism unterstützen.

War es hilfreich?

Lösung

Vielleicht könnten Sie klären, was genau Sie suchen

  

Intel® Threading Building Blöcke (Intel TBB) bieten einen reichhaltigen und kompletten Ansatz Parallelität in einem C ++ Programm zu exprimieren. Es ist eine Bibliothek, die Sie nutzen Multi-Core-Prozessorleistung nehmen hilft, ohne dass ein Einfädeln Experte sein zu müssen. Intel TBB ist nicht nur eine Gewinde-Ersatz-Bibliothek. Es stellt eine höhere Ebene, aufgabenbasierte Parallelität, die Plattform Details und Einfädeln Mechanismen für Skalierbarkeit und Leistung abstrahiert.

Dies ist, was die Gleichzeitigkeit Bibliotheken seit 1998 getan haben, und wurden Teil von Java 5.0 in Jahr 2004.

EDIT: Sagen Sie einen Thread-Pool, der alle logischen Prozessoren auf Ihrem System verwenden können,

.
ExecutorService es = Executors.newFixedThreadPool(
      Runtime.getRuntime().availableProcessors);

// to add a number of tasks
for(int i=0; i<numberOfTasks; i++) {
   es.submit(new Callable<ResultType>() {
      public ResultType call() {
          return doWork(i);
      }
   }
}

Dieser Wille führt doWork auf jedem freien Thread.

Mit Blick auf seine Funktionen, die sie sehen sehr vertraut.

hatte ich einen Blick auf einige der Low-Level-Optimierungen wie Thread bewusst Speicherzuweisung. In Java wird diese TLAB (Thread Local Allocation Puffer) genannt und ist transparent. Ich vermute, die meisten Java-Entwickler nicht einmal wissen, dass sie existieren.

Ergebnisse und Ausnahmen erfaßt werden für Sie in einem zukünftigen Objekt, das Sie später überprüfen können.

Sie können "Bedingungsvariablen" wie CountdownLatch oder CyclicBarrier haben

  

Ein neuer Container Nachahmen C ++ 0x unordered_map und auf der Grundlage einer gemeinsamen Spezifikation sowohl von Intel (TBB 3.0) implementiert und Microsoft (Visual Studio 2010). Es hat drei Vorteile gegenüber dem vorherigen concurrent_hash_map:

  • Eine Schnittstelle sehr ähnlich der C ++ 0x unordered_map
  • Sie erlaubt die gleichzeitige Einführung und Traversal.
  • Keine Verriegelung wird durch die Schnittstelle freigelegt. Eine Implementierung Schlösser können intern verwenden, aber die Verriegelung wird nie in einer Weise ausgesetzt, die Deadlock beitragen kann. Es kann Schlösser intern halten, aber nie während benutzerdefinierte Code aufrufen.

Java ConcurrentHashMap unterstützt die ConcurrentMap und Map-Schnittstellen ermöglicht die gleichzeitige Einsetzen und Traversal und setzen keine Sperren. ;.) Es ist mindestens 9 Jahre alt, so wissen Sie, es robust und stabil sein sollte

Es gibt eine Priorityqueue, die Sie in Ihr Thread-Pool verwenden können, wenn Sie es wünschen.

Andere Tipps

Es ist ein gutes Buch zu diesem Thema:

Java Concurrency in Practice

Java Concurrency in Practice

Es ist in dem java.util.concurrent Paket, da Java5.

Das Edition enthalten eine umfassende Überarbeitung des Java-Speichermodell die Grundlage für parallele Programmierung zu festigen und bekannte Probleme zu beheben. In Java Concurrency in die Sprache von Anfang ausgelegt ist, nicht einfach später in einer Bibliothek hinzugefügt.

Hier finden Sie aktuelle akka , die eine Gleichzeitigkeit Framework stellt Akteure und Software Transactional Memory verwenden. Natürlich ist dies bietet nur Bausteine, müssen Sie noch in der Lage sein, einigen gleichzeitigen Code zu schreiben, aber es wird ein wenig leichter.

Überprüfen Sie die java.util.concurrent Paket aus. Es hat eine ganze Reihe von Klassen, die nützlich für die parallele Programmierung sind.

Übrigens, sollten Sie einige Antworten zu akzeptieren betrachten. 15 Fragen mit Antworten keiner akzeptierten entmutigen Menschen aus Ihren Fragen zu beantworten.

Einige von euch fragen, über den Unterschied zwischen Parallelität und Parallelität. Concurency bedeutet, verschiedene Programme, die gleichzeitig simulieren läuft und der Scheduler entscheidet, wer derjenige ist, läuft. Parallelismus bedeutet ein Programm gliedert sich in Aufgaben und jene Aufgabe zur gleichen Zeit in verschiedenen Kernen ausgeführt wird, ein Problem zu lösen. Wenn diese Aufgaben für Ressourcen mit anderen Programmen comptete (die wir zur Verfügung mehr Aufgaben als Kerne haben), dann haben wir Gleichzeitigkeit und Parallelität zur gleichen Zeit. Die avoing Rennbedingungen der weniger schwer an Parallelität sind, ist das große Problem einen guten Weg zu finden, um eine Aufgabe zu zersetzen richtig gute Ergebnisse zu erzielen. Sehr feinkörnige Zerfall hat Nachteile (Gemeinkosten), aber grobkörnig Parallelität (monotasking) hat auch Nachteile (nicht alle Rechenleistung verwenden auf dem Computer). Sie haben die mittelfristig zu finden, bedeutet es einige Optimierungsprobleme zu tun (Mathematik)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top