Implementation of a Framework Component for Processing Task

Werbung
Implementation of a
Framework Component
for Processing Tasks
within Threads on the
Application Level
Medizinische und Biologische Informatik
Deutsches Krebsforschungszentrum, Heidelberg
Woerner; Jan
Medizinische und
Biologische Informatik
Implementation of a Framework Component
for Processing Task within Threads on the Application Level
Heidelberg
Motivation der Diplomarbeit :
o
o
o
o
Implementation einer Framework Komponente für die
BlueBerry Plattform, mit einer API zum Parallelisieren und
Verwalten von Tasks auf Applikationsebene
Framework API soll nach dem Vorbild der Eclipse Jobs API
entwickelt werden
einfache Verwendbarkeit
einfache Erweiterbarkeit
Woerner; Jan
Medizinische und
Biologische Informatik
Implementation of a Framework Component
for Processing Task within Threads on the Application Level
Heidelberg
Division Medical and Biolgical Informatics
Woerner; Jan
Medizinische und
Biologische Informatik
Implementation of a Framework Component,
Providing an API to Process Task within Threads on Application Level
Heidelberg
Gliederung:
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
Motivation
Einleitung
Eclipse, BlueBerry, MITK und Medical Imaging Applikationen
Problematik
Lösungsansätze
Komponenten des Framework
API, aus Anwendersicht
API, aus Entwicklersicht
Woerner; Jan
Medizinische und
Biologische Informatik
Implementation of a Framework Component
for Processing Tasks within Threads on Application Level
Heidelberg
Einleitung
Ansprechbarkeit einer Applikation und dessen
Benutzeroberfläche
o
o
o
Wie oft befindet sich die Benutzeroberfläche in einem
Zustand, in dem Benutzerinteraktionen zugelassen
werden
Wie oft können neue Aufgaben (Tasks) gestartet werden
Wie oft repräsentiert die Benutzeroberfläche den aktuellen
Status des Programmes
Woerner; Jan
Medizinische und
Biologische Informatik
Implementation of a Framework Component
for Processing Tasks within Threads on Application Level
Heidelberg
Einleitung
Lösungsansatz:
Aufteilung der System Ressourcen in mehrere, parallel
abzuarbeitende Tasks:
- Main Event Thread
Æ User Interaktionen
- Background Threads Æ Ressourcen und zeitintensive Tasks
Woerner; Jan
Medizinische und
Biologische Informatik
Implementation of a Framework Component
for Processing Tasks within Threads on Application Level
Heidelberg
Einleitung
Resultierende Vorteile:
o
Mehr Interaktions- und Kontrollmöglichkeiten über den
aktuellen Zustand in dem sich die Applikation befindet.
-> Interaktion jederzeit mit dem User Interface gegeben
-> Tasks View, die alle in Auftrag gegebene Tasks anzeigt.
-> Tasks können in den Background geschoben werden
-> Statusbenachrichtungen möglich
-> Progress Bars möglich
-> Abbrechen, Anhalten und Fortführen von Tasks
-> Abarbeitungsreihenfolge der Tasks kann geändert werden
Woerner; Jan
Medizinische und
Biologische Informatik
Implementation of a Framework Component
for ProcessingTasks within Threads on Application Level
Heidelberg
Einleitung
Resultierende Vorteile:
- Ressourcen Ausnutzung von Multi-Core CPUs
Spezifische Vorteile in Bezug auf MITK und Medical
Imaging
- Abarbeiten von zeitintensiven Medical Imaging Algorithmen im
Hintergrund
- Erfüllt die höheren Anforderungen von Ärzten und medizinischem
Personal an eine ansprechbare Applikation im klinischem Umfeld
Woerner; Jan
Medizinische und
Biologische Informatik
Implementation of a Framework Component
for Processing Tasks within Threads on Application Level
Heidelberg
Zusammenhänge Eclipse, BlueBerry, MITK und Applikation Threading
Woerner; Jan
Medizinische und
Biologische Informatik
Implementation of a Framework Component
for Processing Tasks within Threads on Application Level
Heidelberg
Problematiken:
Problem:
Æ Programmieren eines Frameworks mit guten „Aplication Programming
Interfaces“ benötigt viel Software Engineering Erfahrung und Zeit
Lösungsansatz
Æ Analyse der Java Eclipse JobsAPI
Problem :
Æ Unterschiede zwischen Java und C++
Lösungsansatz:
Æ jeder Java Code kann in C++ umgesetzt werden (jedoch umfangreiches
Wissen der beiden Programmiersprachen notwendig, um die grundlegenden
Unterschiede zu kennen)
Woerner; Jan
Medizinische und
Biologische Informatik
Implementation of a Framework Component
for Processing Tasks within Threads on Application Level
Heidelberg
Problematiken:
Problem:
Æ Unterschiedliche Prinzipien bei der Entwicklung beider
Programmiersprachen
Java : Schränkt den Programmierer in seinem Möglichkeiten ein um
grundlegende Programmierfehler ausschließen zu können.
C++ : So wenig Ballast wie möglich um so flexibel wie möglich zu bleiben.
Kein Verlust von Performance und Flexibilität um Programmierfehler des
Programmierers ausschließen zu können.
Woerner; Jan
Medizinische und
Biologische Informatik
Implementation of a Framework Component
for Processing Tasks within Threads on Application Level
Heidelberg
Problematiken:
Lösungsansatz :
Æ Definieren von Datentypen möglich, die sich nur in der Art der
Definition, nicht in der Art der Anwendung von Standard C++
Datentypen unterscheiden.
Æ Verwendung von C++ Libraries, die als spezifische Erweiterungen der C++
Sprachelemente gesehen werden können. Und je nach Problem die Sprache
C++ erweitern.
Implementation of a Framework Component
for Processing Tasks within Threads on Application Level
Woerner; Jan
Medizinische und
Biologische Informatik
Heidelberg
Problematiken:
Problem:
C++ und Nebenläufigkeit
Æ Threads sind in Standard C++ nicht definiert.
(schlimmer kein Datenmodel für Threads implementiert)
Java : Thread Support in der Programmiersprache
Lösungsansatz :
Æ Benutzung von Cross Plattform C++ Multithreading Bibliotheken in C++
Woerner; Jan
Medizinische und
Biologische Informatik
Implementation of a Framework Component,
Providing an API to Process Task within Threads on Application Level
Heidelberg
Implementierung
Hauptkomponenten des Frameworks:
o
o
o
o
o
Threads und Workers
Der WorkerPool
Der JobManager
Die JobQueue
Die Job Klassen
Woerner; Jan
Medizinische und
Biologische Informatik
Implementation of a Framework Component
For Processing Task within Threads on the Application Level
Heidelberg
I
Threads und Workers
o
Tasks werden in einem sogenannten Worker Thread
ausgeführt (spezielle Poco Thread Implementation)
Woerner; Jan
Medizinische und
Biologische Informatik
Heidelberg
Implementation of a Framework Component,
Providing an API to Process Task within Threads on Application Level
Woerner; Jan
Medizinische und
Biologische Informatik
Implementation of a Framework Component,
Providing an API to Process Task within Threads on Application Level
Heidelberg
Der WorkerPool
Implementation von einem Thread Pool
o Zentrale Thread Managing Einheit
o
o
Æ Entscheidet über die benötigte Anzahl von
Threads
Leitet von Poco SynchronizedObject ab
JobManager hält einen WorkerPool
Woerner; Jan
Medizinische und
Biologische Informatik
Heidelberg
Implementation of a Framework Component,
Providing an API to Process Task within Threads on Application Level
Woerner; Jan
Medizinische und
Biologische Informatik
Implementation of a Framework Component,
Providing an API to Process Task within Threads on Application Level
Heidelberg
Der JobManager, die Zentrale Task Managing
Komponente
o
o
o
Realisiert als Singleton
Verwaltet die Aufgaben (Tasks) in verschiedenen
Queues, abhängig von der Priorität eines Tasks und
dessen Delay
Gibt den aktuellen auszuführenden Task zurück
Woerner; Jan
Medizinische und
Biologische Informatik
Heidelberg
Implementation of a Framework Component,
Providing an API to Process Task within Threads on Application Level
Woerner; Jan
Medizinische und
Biologische Informatik
Implementation of a Framework Component,
Providing an API to Process Task within Threads on Application Level
Heidelberg
Job Status
Woerner; Jan
Medizinische und
Biologische Informatik
Implementation of a Framework Component,
Providing an API to Process Task within Threads on Application Level
Heidelberg
The Poco Timestamp:
Task Scheduling benötigt einen streng monoton steigenden
Zeitstempel
Lösung :
Poco Timestamp -> Differenz in Millisekunden
zwischen der aktuellen UTC Zeit und der Mitternacht des ersten
Januars 1970 UTC
Woerner; Jan
Medizinische und
Biologische Informatik
Implementation of a Framework Component,
Providing an API to Process Task within Threads on Application Level
Heidelberg
The JobQueue, a Linked List Implemenation
o
o
Speicher und Organisationseinheit von „Waiting“ und „Sleeping“
Jobs
Jobs werden nach Ihrem Zeitstempel sortiert
Woerner; Jan
Medizinische und
Biologische Informatik
Implementation of a Framework Component,
Providing an API to Process Task within Threads on Application Level
Heidelberg
Methodenübersicht der JobQueue :
Woerner; Jan
Medizinische und
Biologische Informatik
Implementation of a Framework Component
for Processing Tasks within Threads on Application Level
Heidelberg
Job Klassen, Gerüste für die auszuführenden Aufgaben
o
o
o
o
o
Alle Job Klassen leiten von der InternalJob Klasse ab
Unterschiedliche Job Klassen möglich
Implementiert wurde eine weitere Job Klasse von der eine
neue Job Klasse ableiten muss um ihren Task starten zu
können
Die Job Klasse erlaubt Prioritäten, die während dem
Scheduling Prozess berücksichtigt werden
Wichtigste Methoden um einen Task zu starten sind die Run()
und Schedule() Methoden der Job Klasse
Woerner; Jan
Medizinische und
Biologische Informatik
Implementation of a Framework Component
for Processing Tasks within Threads on Application Level
Heidelberg
Vordefinierte Möglichkeiten einen Job einzuordnen:
Woerner; Jan
Medizinische und
Biologische Informatik
Heidelberg
Implementation of a Framework Component
for Processing Tasks within Threads on Application Level
Woerner; Jan
Medizinische und
Biologische Informatik
Implementation of a Framework Component
for Processing Tasks within Threads on the Application Level
Heidelberg
Code Beispiel zur Ausführung einer Aufgabe in einem Thread
Woerner; Jan
Medizinische und
Biologische Informatik
Heidelberg
Implementation of a Framework Component
for Processing Tasks within Threads on Application Level
Woerner; Jan
Medizinische und
Biologische Informatik
Heidelberg
Diskussion
Noch Fragen …
Herunterladen