Frage

Wenn Threads ich visualisieren sie manchmal als Verweben 3 oder mehr dreidimensionale Verbindungen zwischen Objekten in einem räumlichen Kontext. Dies ist keine allgemeine Use Case-Szenario, aber für das, was ich tue es ein sinnvoller Weg ist, um darüber nachzudenken.

Gibt es APIs, die Sie verwenden, die Hilfe Threading?

Haben Sie Threads in einer Weise verwendet, die nicht als Thread ein Prozess ist nicht konzeptualisieren?

War es hilfreich?

Lösung

Gibt es APIs, die Sie die Hilfe Threading benutzen?

Sie meinen appart von java.util.concurrent? FunctionalJava bekam einige Konstrukte in paralleler Programmierung des eine Beihilfe, wie in einem mehrteiligen Tutorial beschrieben, die a href starten <= "http :. //apocalisp.wordpress.com/2008/06/18/parallel-strategies-and-the-callable-monad/“rel = "noreferrer"> hier

Haben Sie Threads in einer Weise verwendet, die nicht als Thread ein Prozess ist nicht konzeptualisieren?

Ja, soweit die Threads überhaupt nicht Konzeptualisierung. Nehmen Sie eine asynchrone Aufgabe Starter zum Beispiel. Es nutzt Fäden unter die Decke, aber ich sehe sie nicht und ich nicht über sie kümmern. Sie sind voll von dem Task-Läufer geführt werden.

Unter den Abdeckungen ist es alles nur Fäden, aber wenn wir aufhören, über die einzelnen Faden Pflege und man denke nur an sie als eine Anzahl von Slots, wo man irgendwie Code setzen können und haben es für einen bestimmten Zeitraum laufen, dann das ist, wenn wir für eine höhere Abstraktionsebene zu erreichen beginnen.

Agenten / Schauspieler ist ein gemeinsamer Weg, dies zu tun. Ein Schauspieler ist wie ein Faden, der einen Klumpen Zustand hat, und dann können Sie es einige Code und sagen: „dies tun, um Ihren Zustand, wenn Sie Zeit haben“ senden oder etwas in diese Richtung.

Andere Tipps

Zu allererst

Die übliche Haftungsausschluss: gleichzeitige Programmierung, in jeder Sprache, jeder Abstraktionsebene verwenden, ist hart und kompliziert und hat viele Risiken. Berücksichtigen Sie:

  • Concurrent programming erschwert jede Anwendung, die von Größe
  • Unit-Testing kritische Abschnitte ist hart, und manchmal unmöglich
  • Die Wiedergabe Fehler in Concurrent Code Ursprung ist sehr hart und stark abhängig von Architektur, O Geschmack, Version, etc ...

Java Concurrent APIs

Java hat bei der Herstellung gleichzeitige Programmierung so einfach wie möglich für Entwickler einen langen Weg gegangen. In den meisten Fällen werden Sie sehen, dass java.util.concurrent die meisten der Abstraktionen hat benötigen Sie:

  • Runnable Schnittstelle und Thread Objekt können Sie erweitern. Werfen Sie einfach in Ihrem Code, und Sie haben einen Thread zum Ausführen bereit
  • Ein schöner Satz von Executors : constant pool, dynamischen Pool, geplant oder was auch immer. Werfen Sie einfach einen Runnable es an und es tut ihr Übriges.
  • Semaphores und Schlösser aller Art Sie benötigen, um entlasten, um gemeinsame Verriegelungstechniken zu implementieren.
  • Ein eingebaut in wait() und notify() API für alle Objekte.

Verwendet

Das einzige, was für Sie hinterlassen, als Software-Ingenieur, ist, dass Sie, um sicherzustellen, schreiben richtig Code. Das heißt, Sie sollten sich bewusst von den gefährlichen Situationen, die Sie sich selbst aussetzt könnte:

  • Deadlock -. Eine Situation, in der zwei oder mehr Threads auf ungeordnete Ressourcen warten, eine unendliche Warteschleife Rendering
  • Livelock - zwei oder mehr Fäden, die höflich auf die andere auf eine gemeinsam genutzte Ressource zu geben Art und Weise versuchen, aber nicht am Ende nehmen es (man denke an zwei Personen in einem Korridor miteinander Fuß nach oben und ständig in Bewegung zusammen von Seite zu Seite)
  • Starvation -. Ein einzelner Thread die meisten oder alle einer einzigen gemeinsamen Ressource Aufnahme, damit andere Threads den Zugriff darauf zu entziehen

Main Point (oder, wenn verwenden)

Verwenden Sie Threads nur dann, wenn die Parallelität Ihre Anwendungen Verhalten direkt verbessern.

Wenn Sie auf einer IO / Netzwerk / Hardware-gebundene Ressource warten, Laichen einen Thread auf, so können Sie auch weiterhin andere Sachen zu tun.

Wenn Sie nur versuchen, elegant zu Split-CPU-gebundenen Berechnungen, NICHT Verwendung Threads. Sie könnten nur Ihre Leistung am Ende Verschlechterung.

Wenn Sie Threads tun verwenden, stellen Sie sicher, dass Sie gründlich die Risiken in Betracht gezogen haben, und Triple-geprüft Sie keine Ausnahmesituationen sehen haben.

Nützliche (Online) Ressourcen

Der schnellste Weg in die Dinge zu bekommen, ist die Sun Gleichzeitigkeit Tutorial zu tun . Other than that, ein gutes Buch bekommen.

Viel Glück:)

Concurrency ist ein tiefes und komplexes Thema zu decken. Bücher wie Java Concurrency in Practice helfen können.

Siehe Concurrency Dienstprogramme Übersicht APIs auf Threading. Blocking kann beispielsweise nützlich sein.

  

Eine Warteschlange, die zusätzlich Zu   Operationen, die für die Warteschlange warten,   werden nicht leer, wenn ein Abrufen   Element, und warten Raum zu werden   in der Warteschlange zur Verfügung, wenn eine Speicherung   Element.

Siehe CountDownLatch

  

Eine Synchronisationshilfe, die man erlaubt   oder mehr Threads, bis ein Satz von warten,   Operationen werden in anderen durchgeführt   Threads abgeschlossen ist.

und CyclicBarrier für einige interessante Verhalten.

  

Eine Synchronisationshilfe, die eine ermöglicht   Gewindesatz auf alle warten jeweils   andere eine gemeinsame Barriere Punkt zu erreichen.

Bearbeiten : Ich lese Java Concurrency in Practice jetzt. Es ist sehr gut.

  

Wenn Threads ich sie manchmal visualisieren als Verweben 3 oder mehr dreidimensionale Verbindungen zwischen Objekten in einem räumlichen Kontext.

Das klingt kompliziert, wie würden Sie 600 Fäden zum Beispiel Konzeptualisierung? Warum nicht von ihnen denken, als mehrere Ausführungs-Threads laufen scheinbar gleichzeitig.

  

Gibt es APIs, die Sie verwenden, die Hilfe Threading?

Ich schlage vor, die einfachste und gerade sind vorne die ersten Spiele finden würde. http://www.google.co.uk/search?q=java+ Themen

  

Haben Sie Threads in einer Weise, die als Gewinde Konzeptualisierung nicht ein Prozess sein?

Da Threads nicht Prozesse sind, kann ich nicht sagen, dass ich jemals von Threads als Prozesse gedacht. (Außer auf alte Versionen von Linux) Prozessen nicht Speicher / Objekte standardmäßig für einen Start teilen, laufen sie völlig unabhängig (in der Regel verschiedene Programme, die möglicherweise in verschiedenen Sprachen geschrieben) Sie sind auch unterschiedlich verschiedene APIs beginnen.

Es ist eine Ansicht, die Multi-Threading ist kompliziert. Eigentlich würde ich sagen das Gegenteil. Multi-Thread-Programmierung erfordert, dass Sie Ihren Code einfach, leicht zu verstehen und gerade nach vorne machen, um zu folgern. Während diese Erfahrung nimmt, Ihr Ziel ist Einfachheit.

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