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 …