Verteilte und Parallele Programmierung

PD Stefan Bosse
Universität Bremen, FB Mathematik & Informatik
SS 2020
Version 2020-05-12

Einführung in die verteilte und parallele Programmierung

Programmierung

Programmiersprachen - Sequenzielle

  • Assembler Maximale Performanz, minimalste Zuverlässigkeit/Korrektheit (Fehler), minimalster Speicherbedarf, kein automatisches Speichermanagement

  • C/C++ Sehr gute Performanz, geringer Speicherbedarf, und mittlere Zuverlässigkeit/Korrektheit (Fehler), kein oder minimales automatisches Speichermanagement Prozedurale Programmierung

  • JAVA Mittlere Performanz, hoher Speicherbedarf, gute Zuverlässigkeit/Korrekheit (Fehler), automatisches Speichermanagement Objektorientierte Programmierung

  • Skriptsprachen Unterschiedliche Performanz, wird durch Interpreter bestimmt, automatisches Speichermanagement

    • Python Bytecode (schlechte Performanz)
    • JavaScript Bytecode / JIT (mittlere oder gute Performanz, evtl. hoher Speicherbedarf)
    • Lua Bytecode / JIT (mittlere oder gute Performanz, niedriger Speicherbedarf)

Programmierung

Programmiersprachen - Parallele

Communicating Sequential Processes (CSP)
  • OCCAM und OCCAM-π Mehrprozessmodell nach CSP/Hoare und Pi-Calculus (1980/2000)

  • Limbo (Inferno OS)

  • Go

  • Datenpfadparallelität: HP Fortran, Fortran M

  • Funktionale Programmiersprachen (Haskell, Erlang, OCaML, JoCAML) bieten inhärente Parallelität auf Datenpfadebene

  • Lua. Ach doch? Unterstützt wenigstens das Konzept der Prozessblockierung

  • JCSP : Java + CSP

Programmierung

  • Reine Bytecode Interpreter haben geringe oder mittlere Performanz bei niedrigen Speicherbedarf
    • Der Bytecode wird entweder vollständig aus dem Quelltext beim Start eines Programms erzeugt, oder
    • Der Bytecode wird stückweise nach Bedarf aus dem Quelltext zur Laufzeit erzeugt

Just-in-time Compiler

  • Ein JIT Compiler übersetzt häufig vorkommende Bytecode Abschnitte zur Ausführungszeit in nativen Maschinencode

    • Das ergibt erhöhte Ausführungsperformanz, benötigt aber mehr Speicher
  • Vorteile von Skriptsprachen gegenüber kompilierten Programmen: Schneller Test, ausführliche und genaue Rückmeldung vom Interpreter bei Fehlern, bessere Laufzeitüberwachung von Fehlern,

Virtualisierung

  • Motivation von Virtualisierung:
    • Abstraktion der Maschine und Speicher
    • Abstraktion und einfache Wiederverwendung von Algorithmen
    • Abstraktion von Kommunikation
    • Abstraktion von Parallelisierung und Verteilung!

figvm1


Abb. 1. Eine prozessvirtuelle Maschine, die Programme ausführen kann, die für ein anderes Betriebssystem und eine andere ISA entwickelt wurden: Die Virtualisierungssoftware bildet eine Plattform auf eine andere ab, und übersetzt eine Reihe von Betriebssystem- und Benutzerebenenbefehlen. [A]

Virtualisierung

Compiler