Ein Beispiel für einen Thread-Pool (grüne Kästchen) mit Aufgabenwarteschlangen , die aus wartenden Aufgaben (blau) und abgeschlossenen Aufgaben (gelb) bestehen, wobei eine Aufgabe als „Arbeitseinheit“ verstanden wird.

In der Informatik ist eine Aufgabe eine Ausführungseinheit oder eine Arbeitseinheit. Der Begriff ist mehrdeutig; präzise Alternativen sind Prozess , schlanker Prozess , Thread (für die Ausführung), Schritt , Anfrage oder Abfrage (für die Arbeit). Im nebenstehenden Diagramm sind Warteschlangen für eingehende und ausgehende Aufgaben sowie ein Thread-Pool dargestellt , der die auszuführenden Aufgaben verwaltet. Sowohl die Arbeitseinheiten selbst als auch die Threads, die die Arbeit ausführen, können als „Aufgaben“ bezeichnet werden. Diese können wiederum als Anfragen/Antworten/Threads, eingehende Aufgaben/abgeschlossene Aufgaben/Threads (wie dargestellt) oder Anfragen/Antworten/Aufgaben bezeichnet werden.

Terminologie

Im Sinne einer „Ausführungseinheit“ ist eine Aufgabe in manchen Betriebssystemen gleichbedeutend mit einem Prozess , in anderen mit einem Thread . Bei der nicht-interaktiven Ausführung ( Stapelverarbeitung ) ist eine Aufgabe eine Ausführungseinheit innerhalb eines Jobs [ 1 ] [ 2 ] , wobei die Aufgabe selbst typischerweise ein Prozess ist. Der Begriff „ Multitasking “ bezieht sich primär auf die Verarbeitung – die gleichzeitige Ausführung mehrerer Aufgaben – beinhaltet aber auch Nuancen der Arbeitsbedeutung , also die gleichzeitige Ausführung mehrerer Aufgaben.

Im Sinne einer „Arbeitseinheit“ kann eine Aufgabe in einem Auftrag (einer einmaligen Arbeitsaufgabe) einem einzelnen Arbeitsschritt entsprechen (dem Schritt selbst, nicht dessen Ausführung). Bei der Stapelverarbeitung können einzelne Aufgaben entweder einem einzelnen Verarbeitungsschritt eines einzelnen Elements im Stapel oder einem einzelnen Verarbeitungsschritt aller Elemente im Stapel entsprechen. In Online-Systemen entsprechen Aufgaben meist einer einzelnen Anfrage (in Anfrage-Antwort- Architekturen) oder einer Abfrage (bei der Informationsabfrage ), entweder einem einzelnen Verarbeitungsschritt oder der gesamten systemweiten Verarbeitung.

Beispiele

In der Programmiersprache Java werden diese beiden Konzepte (Arbeitseinheit und Ausführungseinheit) bei der direkten Arbeit mit Threads vermischt, im Executors -Framework jedoch klar unterschieden:

Bei der direkten Arbeit mit Threads Threaddient ein Thread sowohl als Arbeitseinheit als auch als Mechanismus zu deren Ausführung. Im Executor-Framework sind Arbeitseinheit und Ausführungsmechanismus getrennt. Die zentrale Abstraktion ist die Arbeitseinheit, die als Task bezeichnet wird . [ 3 ]

IBM-Terminologie

IBMs Verwendung des Begriffs war einflussreich, unterstreicht aber gleichzeitig die Mehrdeutigkeit des Begriffs. In der IBM-Terminologie hat „Task“ Dutzende spezifische Bedeutungen, darunter: [ 4 ]

  • Eine Arbeitseinheit, die einen der Schritte in einem Prozess darstellt.
  • Eine Arbeitseinheit, die von einem Gerät oder Prozess ausgeführt werden soll.
  • Ein Prozess und die Verfahren, die diesen Prozess durchführen.
  • Eine Reihe von Maßnahmen, die darauf abzielen, ein bestimmtes Ergebnis zu erzielen. Eine Aufgabe wird an einer Reihe von Zielen nach einem festgelegten Zeitplan ausgeführt.
  • Eine Recheneinheit. Bei einem parallelen Job arbeiten zwei oder mehr Aufgaben gleichzeitig über Nachrichtenaustausch und gemeinsamen Speicher zusammen. Obwohl es üblich ist, jedem physischen oder logischen Prozessor eine Aufgabe zuzuordnen, sind die Begriffe „Aufgabe“ und „Prozessor“ nicht austauschbar.
  • Eine Aktivität, die einen geschäftlichen Wert hat, von einem Benutzer initiiert und von einer Software ausgeführt wird.

In z/OS ist es genau wie folgt definiert: [ 5 ]

  • „In einer Multiprogrammierungs- oder Multiprozessorumgebung bezeichnet man eine oder mehrere Sequenzen von Anweisungen, die von einem Steuerungsprogramm als ein vom Computer zu erledigendes Arbeitselement behandelt werden.“

Der Begriff „Task“ in OS/360 bis z/OS entspricht in etwa einem Lightweight-Prozess; die Tasks eines Jobschritts teilen sich einen Adressraum. In MVS/ESA bis z/OS hingegen kann ein Task oder ein Service Request Block (SRB) über seine Zugriffsliste auf andere Adressräume zugreifen.

Linux-Kernel

Der Begriff „Task“ wird im Linux-Kernel (zumindest seit Version 2.6.13 [ 6 ] bis einschließlich Version 4.8 [ 7 ] ) verwendet, um eine Ausführungseinheit zu bezeichnen, die verschiedene Systemressourcen mit anderen Tasks teilen kann. Je nach Grad der Ressourcenteilung kann der Task als herkömmlicher Thread oder Prozessclone() betrachtet werden. Tasks werden mithilfe des Systemaufrufs [ 8 ] erzeugt, wobei der Benutzer den gewünschten Grad der Ressourcenteilung festlegen kann.

Geschichte

Der Begriff „ Task“ für einen Teil eines Auftrags stammt aus der Zeit der Multiprogrammierung in den frühen 1960er Jahren, wie dieses Beispiel aus dem Jahr 1961 zeigt:

Das serielle Modell ist in der Lage, Aufgaben eines Auftrags unabhängig voneinander zu bearbeiten, ähnlich der Funktionsweise der IBM 709. [ 9 ]

Der Begriff wurde mit der Einführung von OS/360 (angekündigt 1964) populär , das Multiprogrammierung mit fester Anzahl von Tasks (MFT) und Multiprogrammierung mit variabler Anzahl von Tasks (MVT) bot. Dabei wurden Tasks als ressourcenschonende Prozesse identifiziert, ein Job bestand aus mehreren Tasks, und später konnten Tasks Unter-Tasks (in der modernen Terminologie: Kindprozesse ) haben.

Heutzutage wird der Begriff „Aufgabe“ sehr uneinheitlich verwendet. Beispielsweise verwaltet der Windows Task-Manager laufende Prozesse , während die Windows-Aufgabenplanung Programme zur späteren Ausführung plant – traditionell als Jobplaner bekannt – und die .jobDateiendung .txt verwendet. Der Begriff „ Aufgabenwarteschlange “ wird hingegen üblicherweise im Sinne von „Arbeitseinheiten“ verwendet.

Siehe auch

Referenzen

  1. ^ „Was ist eine Aufgabe? – Definition von WhatIs.com“ . WhatIs.com . Abgerufen am 11. Juni 2015 .
  2. ^ „Was sind Computerprozesse?“ . liutilities.com . Abgerufen am 11. Juni 2015 .
  3. ^ Bloch, Joshua . Effective Java (Dritte Aufl.). S.  272 , Punkt 68.
  4. ^ IBM-Terminologie: T
  5. ^ Glossar der z/OS-Begriffe und Abkürzungen : T
  6. ^ " " . GitHub.com . Linus Torvalds. 29. August 2005.include/linux/sched.h
  7. ^ " " . GitHub.com . Linus Torvalds. 3. Oktober 2016.include/linux/sched.h
  8. ^ „clone, __clone2 – einen Kindprozess erstellen“ . Linux Programmer's Manual . 17. Juli 2016. Abgerufen am 6. November 2016 .
  9. ^ James Larrimore McKenney (1961). Simultane Multiprogrammierung von elektronischen Computern . S.  154 .