Unterschiede zwischen Multithreading und Multitasking für Programmierer

Überblick

Dieses Whitepaper erläutert die Bedeutung der Nutzung von Multitasking und Multithreading in der Anwendungsentwicklung.

Inhalt

Hintergrund

Multitasking

In der Computertechnologie ist Multitasking eine Methode, bei der sich mehrere Tasks, auch Prozesse genannt, gemeinsame Verarbeitungsressourcen, wie etwa den Prozessor, teilen. Mit einem Multitasking-fähigen Betriebssystem, beispielsweise Windows XP, können mehrere Anwendungen gleichzeitig ausgeführt werden. Multitasking bezieht sich auf die Fähigkeit des Betriebssystems, schnell zwischen den Verarbeitungstasks hin und her zu wechseln, so dass der Eindruck entsteht, dass verschiedene Anwendungen mehrere Operationen zur selben Zeit durchführen.

Da die Taktraten der Prozessoren immer weiter erhöht wurden, laufen Anwendungen nicht nur schneller ab, Betriebssysteme können auch schneller zwischen ihnen hin und her springen. Dadurch ergibt sich eine insgesamt bessere Leistung. Viele Vorgänge können auf einem Computer gleichzeitig geschehen und einzelne Anwendungen laufen schneller ab.

Single-Core

Bei einem Computer mit einem Single-Core-Prozessor wird immer nur ein Task auf einmal bearbeitet, d. h. dass der Prozessor Befehle für diesen Task aktiv ausführt. Multitasking ermöglicht bei solch einem System eine quasi parallele Abarbeitung, indem sehr schnell zwischen den einzelnen Tasks hin und her gewechselt wird. Das Betriebssystem ist verantwortlich für das Scheduling der einzelnen Tasks.


[+] Bild vergrößern

Abbildung 1: Single-Core-Systeme legen die Ausführung von Tasks auf einem Prozessor fest.

Multicore

Werden sie auf einem Multicore-System ausgeführt, können Multitasking-fähige Betriebssysteme tatsächlich mehrere Tasks gleichzeitig bearbeiten. Mehrere Verarbeitungs-Engines arbeiten dabei unabhängig voneinander an verschiedenen Tasks.

Beispielsweise können auf einem Dual-Core-System vier Anwendungen – etwa Textverarbeitung, E-Mail, Web-Browser und Antivirensoftware – parallel auf zwei Prozessorkernen ausgeführt werden. Aufgrund des Multitasking kann der Anwender etwa seine E-Mails lesen und gleichzeitig einen Brief tippen, so dass die Leistung der Anwendungen insgesamt verbessert wird.


[+] Bild vergrößern 

Abbildung 2: Dual-Core-Systeme machen es möglich, dass Multitasking-fähige Betriebssysteme zwei Tasks gleichzeitig ausführen können.

Das Betriebssystem bearbeitet mehrere Anwendungen effizienter, indem die verschiedenen Prozesse zwischen den einzelnen Prozessorkernen aufgeteilt werden. Der Computer verteilt die Arbeit – jeder Core muss demnach nur noch halb so viele Anwendungen wie zuvor bearbeiten – und deshalb werden Gesamtdurchsatz und Leistung gesteigert. Anwendungen werden also parallel ausgeführt.

Multithreading

Multithreading erweitert das Konzept des Multitasking auf die Anwendungen selbst. So können spezifische Operationen innerhalb einer Applikation in einzelne Threads aufgeteilt werden. Alle diese Threads laufen parallel ab. Das Betriebssystem verteilt die Verarbeitungszeit nicht nur auf verschiedene Anwendungen, sondern auch auf mehrere Threads innerhalb einer Applikation.

In einem Multithreading-fähigen Programm unter NI LabVIEW könnte eine Beispielanwendung etwa in vier Threads zerlegt werden – je einen für Benutzeroberfläche, Datenerfassung, Netzwerkkommunikation und Protokollierung. Die Threads können mit Prioritäten versehen werden, so dass sie unabhängig voneinander arbeiten. So können Tasks in Multithreading-fähigen Anwendungen parallel zu anderen Applikationen laufen, die auf dem System ausgeführt werden.


[+] Bild vergrößern 

Abbildung 3: Ein Dual-Core-System ermöglicht Multithreading.

Anwendungen, die sich Multithreading zunutze machen können, haben neben vielen anderen folgende Vorteile:

  • Effizientere Prozessorauslastung
  • Höhere Systemzuverlässigkeit
  • Verbesserte Leistung auf Multiprozessorcomputern

Oft greifen Anwendungen gleichzeitig auf mehrere Hardwaregeräte, z. B. Messgeräte, zu. Die Ausführung dieser Befehle dauert in vielen Fällen recht lange. In einer Anwendung mit nur einem Thread blockiert bzw. verhindert ein synchroner Aufruf die Ausführung eines anderen Tasks, bis die Operation vollendet ist. Multithreading verhindert diese Blockade.

Während der synchrone Aufruf einen Thread in Anspruch nimmt, laufen andere Programme, die nicht von diesem Aufruf abhängen, in anderen Threads ab. Die Ausführung wird fortgesetzt, anstatt stillzustehen, bis der synchrone Aufruf vollendet ist. So maximiert eine Multithreading-fähige Anwendung die Effizienz des Prozessors, denn dieser liegt nicht still, wenn ein Thread ablaufbereit ist.

Multithreading mit LabVIEW

LabVIEW  teilt jede Anwendung automatisch in mehrere Ausführungsthreads auf. Die komplexen Aufgaben der Threadverwaltung sind transparent in das LabVIEW-Ausführungssystem integriert.


[+] Bild vergrößern 

Abbildung 4: LabVIEW nutzt mehrere Ausführungsthreads.

LabVIEW nutzt präemptives Multithreading auf Betriebssystemen, die dies ermöglichen. Daneben kommt auch kooperatives Multithreading zum Einsatz. Betriebssysteme und Prozessoren mit präemptiven Multithreading, bei dem das Betriebssystem einem Prozess während der Abarbeitung die Prozessorzeit entziehen kann, nutzen eine begrenzte Anzahl von Threads. In bestimmten Fällen kehren diese Systeme dann zum kooperativen Multithreading zurück, bei dem die Threads selbst die Prozessorressourcen freigeben müssen.

Das Ausführungssystem sorgt dafür, dass VIs mithilfe von Threads präemptiv Multitasking-fähig werden. Jedoch steht nur eine begrenzte Anzahl von Threads zur Verfügung. Bei hochgradig parallelen Anwendung verwendet das Ausführungssystem kooperatives Multitasking, wenn alle verfügbaren Threads belegt sind. Darüber hinaus verwaltet das Betriebssystem das präemptive Multitasking zwischen der Anwendung und anderen Aufgaben.