Grandits, P. (2014). Active objects revisited : a concurrency library for Java based on an object-oriented approach to parallelism [Diploma Thesis, Technische Universität Wien]. reposiTUm. https://doi.org/10.34726/hss.2014.23814
concurrent programming; object-oriented programming; active objects; Java; class library; reflective programming; bytecode instrumentation
en
Abstract:
In jüngster Vergangenheit wurden Parallelisierung und Nebenläufigkeit zu einem vieldiskutierten Forschungsgebiet, da für die Programmierung von Anwendungen geeignete Sprachkonstrukte benötigt werden, um die Leistung von Mehrkernprozessoren und Mehrprozessorsystemen vollständig auszunutzen. Aus diesem Grund hat die Programmiersprache Erlang an Wichtigkeit gewonnen, da sie eine effiziente Implementierung des Aktorenmodells bereitstellt. Dieses stützt sich auf Aktoren, die einen eigenen Thread verwenden, um eintreffende Nachrichten zu verarbeiten. Ein verwandter Ansatz, der dieses Konzept erweitert, ist das Active-Object-Pattern. Anstatt von Nachrichten operiert das Modell auf sogenannten Method-Requests. Diese werden automatisch generiert, wenn eine der Methoden des aktiven Objekts durch einen externen Thread aufgerufen wird und dienen dazu, den Aufruf von der Ausführung zu entkoppeln. Die hereinkommenden Method-Requests werden nacheinander abgearbeitet um sicherzustellen, dass zu jedem Zeitpunkt höchstens eine einzige Methode ausgeführt wird. Dieses Konzept unterstützt die Entwicklung, weil Synchronisierungsaufgaben erleichtert werden. Allerdings existiert derzeit keine Java-Implementierung, die dieses Verfahren angemessen in die Sprache integriert. Deshalb behandelt diese Diplomarbeit die Frage, welche Funktionen und Features für eine Realisierung des Active-Object-Patterns sinnvoll sind und wie diese durch reflektive Programmierung und Bytecode-Instrumentation in eine Bibliothek für Java eingebunden werden können. Zur Erreichung dieses Ziels wird zuerst die zugehörige Literatur aus den Anfängen der Forschung in diesem Gebiet genauer betrachtet. Außerdem werden auch aktuellere Arbeiten untersucht, die diese Methodologie wieder aufgriffen, nachdem das anfängliche Interesse schwand. Dabei werden bestimmte erweiterte Features aus der gesammelten Information ausgewählt, die anschließend zusammen mit der Basisfunktionalität modelliert werden. Dieses Design wird durch eine Proof-of-Concept-Implementierung realisiert, die verwendet werden kann, um Applikationen basierend auf aktiven Objekten zu entwickeln. Letztendlich wird die Eignung der gewählten Konzepte evaluiert. Dazu wird ein nebenläufiges Szenario sowohl konventionell als auch mit Hilfe der Funktionalität der Bibliothek programmiert, um spezifische Leistungs- und Implementierungscharakteristika der verschiedenen Anwendungen zu bestimmen. Anschließend werden die gesammelten Ergebnisse verglichen und analysiert. Die Evaluierung zeigt, dass die Mechanismen der Bibliothek die Entwicklung eines parallelen Programms erleichtern, weil diese den Fokus von der Synchronisation auf die eigentliche Kernfunktionalität der Komponenten lenken. Dieser Umstand reduziert den notwendigen Entwicklungsaufwand und hilft, Fehler im Softwareprodukt zu vermeiden. Allerdings zeigt die Analyse, dass der Ansatz in manchen Kategorien auch eine schlechtere Performanz mit sich bringt, wenn man aktive Objekte dem herkömmlichen Stil gegenüberstellt. Auch wenn der Unterschied nicht überwältigend ist, kann dieser ein entscheidender Faktor in manchen Fällen sein. Durch das Schließen des Leistungsunterschieds im Zuge weiterer Optimierungen und Erweiterungen würde die Verwendung des vorgeschlagenen Programmiermodells reizvoller werden. Alles in allem deutet das Ergebnis darauf hin, dass eine gut integrierte Implementierung von aktiven Objekten im Vergleich zu normalen Java-Nebenläufigkeitskonstrukten ein konkurrenzfähiger Ansatz ist.
de
In recent years, parallelism and concurrency have become significant topics because applications need adequate language constructs in order to completely exploit the performance offered by multi-core processors and multi-processor systems. As a result, Erlang regained importance due to its efficient implementation of the actor model. In this technique, components use an independent thread to handle incoming messages. A related approach is the active object pattern. It expands on the idea of actors, but operates on method requests rather than messages. These kinds of instances are automatically generated whenever one of the active object's methods is called by an external thread. This strategy decouples the invocation of an operation from its execution. The incoming requests are scheduled one after the other to guarantee that only a single method is performed at a time. The concept facilitates software development because synchronisation concerns are alleviated. However, there does not currently exist a Java implementation of active objects that integrates appropriately into the language. Therefore, this thesis addresses the question which functions and features are reasonable for such a realisation of the pattern, and how they can be incorporated into a library for Java through reflective programming and bytecode instrumentation. The first step to achieve this objective is to study associated literature from the initial surge of research, as well as more modern work that revisited the methodology after the original interest declined. Certain advanced features are selected from the gathered information. They are then cast into a model together with the basic functionality. The design is realised by a proof of concept implementation. The resulting tool can be used to develop classes of active objects. Lastly, the suitability of the chosen constructs is evaluated. For this purpose, a concurrent scenario is programmed both conventionally and with the aid of the library. These applications are used for determining specific code and performance characteristics of the individual approaches. Thereafter, the collected data are compared and analysed. The evaluation shows that the presented mechanisms ease the development of parallel software because the focus is moved from the synchronisation to the actual core functionality of the components. This practice reduces the necessary implementation effort and helps to avoid faults in the end product. However, in some categories the analysis reveals inferior efficiency of the active object applications when matched against the traditional style. Although the difference is not overwhelming, it may be a deciding factor in some cases. The technique can become more appealing by closing the performance gap through further optimisations and extensions. All things considered, the outcome indicates that a well-integrated active object feature is a competitive approach if compared to standard Java concurrency.
en
Weitere Information:
Abweichender Titel laut Übersetzung der Verfasserin/des Verfassers Zsfassung in dt. Sprache