Computersysteme lösen Probleme in der echten Welt, sodass wir zur Einstieg auch in der Realwelt bleiben, um uns dem Umfeld der nebenläufigen Programmierung zu nähern.
Gehen wir durch die Welt bemerken wir viele Dinge, die gleichzeitig passieren: Die Sonne scheint, auf der Straße fahren Mofas, Autos werden gelenkt, das Radio spielt, Menschen sprechen, einige essen, Hunde tollen auf der Wiese. Nicht nur passieren diese Dinge gleichzeitig, sondern es gibt mannigfaltige Abhängigkeiten, wie Wartesituation: an der roten Ampel warten einige Autos, während bei der grünen Ampel Menschen über die Strasse gehen – beim Signalwechsel dreht sich das Spiel um.
Wenn viele Dinge gleichzeitig passieren, nennen wir ein interagierendes System nebenläufig. Dabei gibt es Vorgänge, die echt parallel ausgeführt werden können, und bei machen Dingen sieht es so aus, als ob sie parallel passieren, aber in Wirklichkeit passiert es nur schnell hintereinander. Was wir dann wahrnehmen, ist eine Quasiparallelität. Wenn zwei Menschen etwa gleichzeitig essen, ist das parallel, aber wenn jemand isst und atmet, so sieht dass zwar von außen gleichzeitig aus, ist es aber nicht, sondern schlucken und atmen ist sequenziell[1]. Auf Software übertragen: die gleichzeitige Abarbeitung von Programmen und Nutzung von Ressourcen nebenläufig ist; es ist eine technische Realisierung der Maschine (also Hardware), ob diese Nebenläufigkeit durch parallele Abarbeitung – etwa durch mehre Prozessoren oder Kerne – auch wirklich umgesetzt wird.
Nebenläufige Programme werden in Java durch Threads realisiert und im Idealfall findet die Abarbeitung auch parallel statt, wenn die Maschine mehrere Prozessoren oder Kerne hat. Ein Programm, was nebenläufig realisiert ist, kann durch zwei Prozessoren bzw. Kerne in der parallelen Abarbeitung in der Zeit halbiert werden, muss es aber nicht, es ist immer noch Sache des Betriebssystems, wie es die Threads ausführt.
[1] lassen wir Kleinkinder einmal außen vor
Ähnliche Beiträge
- java.util.concurrent.atomic.LongAdder und DoubleAdder in Java 8
- Einige Gründe, warum man keinen Second Level Cache (etwa bei Hibernate) verwenden soll
- GCC 4.5 ist raus, am Java (GCJ) ändert sich nix
- Parallele Berechnung von Präfixen über Arrays-Klasse in Java 8
- Abstrakte überschriebe Schnittellenoperationen nehmen Default-Methoden weg