Actor Model
Das Actor Model ist ein auf Message Passing beruhendes Programmiermodell für nebenläufige Software, in dem eine Software aus parallel agierenden Aktoren besteht. Es wurde zuerst durch Carl Hewitt beschrieben und durch Gul Agha weiter ausgearbeitet. Verwendung findet das Actor Model unter anderem in den Programmiersprachen Erlang und Scala.
Beschreibung
Aktoren sind nebenläufige Einheiten, die nicht über einen geteilten Speicherbereich verfügen, sondern ausschließlich über Nachrichten kommunizieren. Ein Aktor besteht somit aus einer Mailbox, die eingehende Nachrichten anderer Aktoren zwischenspeichert und einer Funktion, die eingehende Nachrichten verarbeitet. Liegt mindestens eine Nachricht in der Mailbox, wird diese entnommen und an die Funktion zur Verarbeitung übergeben. Während der Verarbeitung einer Nachricht kann ein Aktor neue Aktoren erzeugen, Nachrichten an andere Aktoren versenden sowie seinen internen Zustand und somit sein zukünftiges Verhalten ändern. Ein Aktor verarbeitet zu einem Zeitpunkt nur eine Nachricht. In dem von Hewitt und Agha beschriebenen Actor Model soll eine Implementierung sicherstellen, dass Nachrichten sicher zugestellt werden, also keine Nachrichten verloren gehen. Das die Nachrichten in der Reihenfolge zugestellt werden, wie sie versendet wurden, wird nicht als Notwendigkeit definiert, wird aber durch viele Implementierungen sichergestellt.
Vorteile
Der Umstand, dass Aktoren zu einem Zeitpunkt nur eine Nachricht abarbeiten und kein anderer nebenläufiger Prozess den internen Speicherbereich eines Aktors beeinflussen darf, führt dazu, dass die Programmierung innerhalb des Aktors rein sequentiell ist. Vermutungen, die aufgrund des internen Zustandes des Aktors zu Beginn der Verarbeitung einer Nachricht getroffen wurden, behalten über die gesamte Abarbeitung der Nachricht weiterhin ihre Gültigkeit. Dies unterscheidet das Actor Model grundlegend von klassischen und verbreiteten Shared-Memory-Concurrency-Ansätzen, in denen alle nebenläufigen Threads auf einen gemeinsamen Speicherbereich zugreifen und dieser in Teilen über Locking-Primitive wie Semaphoren, Mutexe und Signals geschützt wird.
Nachteile
Da Aktoren nicht über einen gemeinsamen Speicherbereich verfügen, stellen sowohl die Nachrichten, als auch der interne Speicherbereich eines anderen Aktors eine Kopie von bestimmten Werten dar. Somit liegt die gleiche Information mehrfach im Speicher vor, was zu einem erhöhten Speicherbedarf führt. Darüber hinaus steht das Versenden, in die Mailbox legen und Verarbeiten einer Nachricht im Actor Model, einem (im besten Fall statisch gebundenen) Funktionsaufruf bei der Shared State Concurrency gegenüber. Der Aufwand ist im Actor Model somit wesentlich erhöht.
Verbreitung
Das Actor Model ist stark bei funktionalen Programmiersprachen verbreitet. So stellt es das grundlegende Modell für Nebenläufigkeit in der Programmiersprache Erlang dar. Eine weitere Verbreitung erhält das Modell durch Sprachen mit gemischten Paradigmen wie Scala. Auch für klassisch imperative Programmiersprachen existieren Implementierungen des Actor Models, wie z. B. Theron als Actor-Bibliothek für C++.
Literatur
- Hewitt, Carl and Bishop, Peter and Steiger, Richard: A Universal Modular Actor Formalism for Artificial Intelligence. In: Proceeding IJCAI'73 Proceedings of the 3rd international joint conference on Artificial intelligence. 1973, S. 235–245 ([1]).
- Agha, Gul: Actors: A Model of Concurrent Computation in Distributed Systems. MIT Press, 1986.
- Haller, Philipp: Actors in Scala. Erste Auflage. Artima, 2012, ISBN 978-0-9815316-5-6.
- Larson, Jim: Erlang for Concurrent Programming. In: Queue. Band 6, Nr. 5, 2008, S. 18--23, doi:10.1145/1454456.1454463.