-
ERFINDUNGSGEBIET
-
Die vorliegende Erfindung betrifft
allgemein Fäden
für eine
Computerprogrammausführung
und insbesondere die Verwaltung eines Pools von Fäden zur
Ausführung
von in Schlange eingesetzten Arbeitsgegenständen.
-
HINTERGRUND DER ERFINDUNG
-
Ein Faden wird allgemein als leicht
gewichtiger Fluss der Steuerung innerhalb eines Prozesses angesehen,
worin ein Prozess einen schwergewichtigen Fluss der Steuerung darstellt.
Ein Prozess ist dahingehend schwergewichtig, dass das Betriebssystem
einen dezidierten Speicherbereich für den Programmcode und die
Daten zuordnet, die vom Prozess verwendete werden, wohingegen ein
Faden darin leicht gewichtig ist, dass ein Faden innerhalb des Speicherbereichs
eines Prozesses existiert. Einige Prozesse haben mehrere Fäden, so
dass mehrere Fäden
gleichzeitig innerhalb eines Prozesses ablaufen können.
-
Fäden
werden im allgemeinen mit der Unterstützung von einem Betriebssystem
erzeugt und für gewöhnlich ausgeführt, indem
der Faden mit einem bestimmten Betrieb gekoppelt wird. Das bedeutet, dass
ein Faden zum Zweck einer Durchführung
eines bestimmten Betriebs erzeugt wird. Nachdem der Betrieb abgeschlossen
ist, kann der Faden zerstört
oder beim Durchführen
desselben Betriebs mit vielleicht anderen Eingabedaten wiederverwendet
werden.
-
Das Erzeugen und Initiieren von neuen
Fäden kann
hinsichtlich des Verbrauchs von Betriebssystemressourcen teuer sein.
Jedesmal, wenn ein neuer Faden benötigt wird, muss die Steuerung
an das Betriebssystem weitergegeben werden, um den Faden zu erzeugen
und irgendwelche für
das Verwalten des Fadens erforderlichen Strukturen zu errichten
und zu erzeugen. Solchermaßen
erzeugen einige Applikationen mehrere Fäden zum Durchführen des selben
Betriebs innerhalb eines Prozesses. Jedoch sind die Fäden für die spezifischen
Betriebe dezidiert, für
die sie erzeugt wurden, was hinsichtlich der Ausnutzung von Ressourcen
ineffizient sein kein. Beispielsweise kann eine erste Gruppe von
Fäden erzeugt
und für
eine erste Funktion eines Systems dezidiert sein, und eine zweite
Gruppe von Fäden
kann erzeugt und für
eine zweite Funktion des Systems dezidiert sein. Wenn die Nachfrage
für die
erste Funktion niedrig ist, d. h. worin nur ein wenige Fäden der
ersten Gruppe von Fäden
aufgerufen werden, und. die Nachfrage für die zweite Funktion hoch
ist, wobei es mehr Nachfrage für
die zweite Funktion gibt, als es verfügbare Fäden gibt, dann kann die Leistung
des Systems durch die begrenzte für die Durchführung der
zweiten Funktion verfügbare
Anzahl von Fäden
eingeschränkt
werden. Mit anderen Worten können
die Nachfragen für
eine von der zweiten Funktion durchgeführten Arbeit aufgrund der begrenzten
mit der zweiten Funktion verknüpften
Anzahl von Fäden
verzögert
werden.
-
Das vorherige Szenarium veranschaulicht eine
Situation, worin die Leistung selbst dann verschlechtert werden
kann, wenn es eine für
das Erfüllen
der Nachfrage verfügbare
Verarbeitungsfähigkeit geben
kann. Spezifisch sind die mit der ersten Funktion verknüpften Fäden im Wartezustand,
während die
mit der zweiten Funktion verknüpften
Fäden vollständig benutzt
werden.
-
Ein System zum Verwalten von Fäden wird im
U.S.-Patent 5.504.898 von Klein offenbart. Das offenbarte System
stellt eine Umgebung mit Fäden
bereit, indem Faden-bezogene Stapeljobs verwendet werden, um Fadenaufgaben
anzunehmen und sie einzeln den spezialisierten Stapeljobs anzutragen, die
die Aufgaben durchführen.
Rücksprungdaten werden
von den Faden-bezogenen Stapeljobs an einer gemeinsamen Schlange
angelegt, und es wird veranlasst, dass die verwendete Applikation
an der gemeinsamen Schlange wartet. Obwohl das 5.504.898-Patent
ein System offenbart, das in der Lage ist, einen Pool der aktiven
Faden-bezogenen Stapeljobs
aufrechtzuerhalten, werden diese Jobs nicht auf eine Art und Weise
verwaltet, die allen oben erörterten
Leistungsaufgaben begegnet.
-
Ein Verfahren und ein System, das
den zuvor erwähnten
Pro blemen und anderen betreffenden Problemen begegnet, ist daher
wünschenswert.
-
ZUSAMMENFASSUNG DER ERFINDUNG
-
Ein System und ein Verfahren zum
Verwalten eines Pools von Fäden
wird zum Ausführen
von Fadenbetrieben bereitgestellt. Eine Arbeitsschlange wird bereitgestellt,
um die gesteuerte Zuweisung von Faden-bezogenen Ressourcen zur Ausführung einer Mehrzahl
an Fadenbetrieben zu unterstützen.
Ein Faden-Pool wird instantiiert, der eine Mehrzahl von Fäden einschließt, und
eine Arbeitsschlange, die Programm-steuerbare Zustände hat,
wird instantiiert. Fadenbetriebe werden in die Arbeitsschlange eingereiht,
wenn sich die Arbeitsschlange in einem laufenden oder unterbrochenen
Zustand befindet, und wenn sich die Arbeitsschlange in einem gestoppten Zustand
befindet, werden Anforderungen zum Einreihen in die Schlange von
Fadenbetrieben verweigert. In anderen Ausführungsformen können vorübergehende
Fäden in
den Faden-Pool eingeführt
werden, um einem zeitweiligen Bedarf an zusätzlichen Faden-Ressourcen zu
begegnen.
-
Es ist nicht beabsichtigt, dass die
obige Zusammenfassung der vorliegenden Erfindung jede offenbarte
Ausführungsform
der vorliegenden Erfindung beschreibt. Die Figuren und die detaillierte
Beschreibung, die folgen, stellen zusätzliche beispielhafte Ausführungsformen
und Aspekte der vorliegenden Erfindung bereit.
-
KURZE BESCHREIBUNG DER
ZEICHNUNGEN
-
Weitere Aspekte und Vorteile der
Erfindung werden bei der Durchsicht der detaillierten Beschreibung
und unter Bezugnahme auf die Zeichnungen ersichtlich, in denen:
-
1 ein
Funktionsblockdiagramm eines Systems zum Bereitstellen eines Pools
von wiederverwendbaren Fäden
ist, damit in Übereinstimmung mit
einer Ausführungsform
der Erfindung Arbeitsgegenstände
durchgeführt
werden;
-
2 ein
Zustandsdiagramm ist, das mögliche
Zustände
des Faden-Pools und Übergänge zwischen
den Zuständen
zeigt;
-
3 das
Verhältnis
zwischen den 3A und 3B zeigt, die zusammen ein
Klassendiagramm einer Ausführungsform
einer Klassenanordnung zum Bereitstellen wiederverwendbarer Fäden und
einer Arbeitsschlange der Fadenbetriebe umfassen;
-
4 ein
Objekt-Interaktionsdiagramm ist, das die Einreihung eines Fadenbetriebs
in die Arbeitsschlange darstellt, wenn sich der Faden-Pool in einem
laufenden oder unterbrochenen Zustand befindet;
-
5 ein
Objekt-Interaktionsdiagramm ist, das den Übergang des Faden-Pools von
einem laufenden zu einem unterbrochenen Zustand darstellt;
-
6 ein
Objekt-Interaktionsdiagramm ist, das den Übergang des Faden-Pools von
einem laufenden zu einem gestoppten Zustand darstellt;
-
7 ein
Objekt-Interaktionsdiagramm ist, das den Übergang des Faden-Pools von
einem unterbrochenen zu einem laufenden Zustand darstellt;
-
8 ein
Objekt-Interaktionsdiagramm ist, das den Übergang des Faden-Pools von
einem unterbrochenen zu einem gestoppten Zustand darstellt;
-
9 ein
Objekt-Interaktionsdiagramm ist, das den Übergang des Faden-Pools von
einem gestoppten zu einem unterbrochenen Zustand darstellt;
-
10 ein
Objekt-Interaktionsdiagramm ist, das die Ausführung eines Fadens darstellt,
wenn sich der Faden-Pool in einem unterbrochenen Zustand befindet;
-
11 ein
Objekt-Interaktionsdiagramm ist, das die Ausführung eines Fadens darstellt,
wenn sich der Faden-Pool in einem laufenden Zustand befindet;
-
12 ein
Objekt-Interaktionsdiagramm ist, das die Ausführung eines Fadens darstellt,
wenn sich der Faden-Pool in einem gestoppten Zustand befindet und
die Arbeitsschlange nicht leer ist; und
-
13 ein
Objekt-Interaktionsdiagramm ist, das die Ausführung eines Fadens zeigt, wenn
sich der Faden-Pool in einem gestoppten Zustand befindet und die
Arbeitsschlange leer ist.
-
Obwohl die Erfindung für verschiedene
Modifikationen und alternative Formen zugänglich ist, wurden ihre besonderen
Aus führungsformen
exemplarisch in den Zeichnungen gezeigt und werden detailliert hierin
ebenfalls exemplarisch beschrieben werden.
-
DETAILLIERTE BESCHREIBUNG
-
Es wird angenommen, dass die vorliegende Erfindung
an eine Vielfalt an Systemen anlegbar ist, um Fäden und die von den Fäden durchgeführte Arbeit
zu verwalten. Es wurde befunden, dass die vorliegende Erfindung
besonders anwendbar und vorteilhaft ist, wenn sie in einer Objekt-orientierten
Programmiersprache implementiert wird. Obwohl die vorliegende Erfindung
nicht so eingeschränkt
ist, wird mithilfe der Klassendefinitionen, die verwendet werden,
um die Erfindung zu implementieren, eine Einschätzung der vorliegenden Erfindung
gezeigt.
-
1 ist
ein Funktionsblockdiagramm eines Systems zur Bereitstellung eines
Pools von wiederverwendbaren Fäden
für die
Durchführung
von Arbeitsgegenständen
in Übereinstimmung
mit einer Ausführungsform
der Erfindung. Das System 10 schließt eine Arbeitsschlange 12,
einen Faden-Pool 14, einen Arbeitsschlangen-Controller 16 und
einen Faden-Pool-Manager 18 ein. Fadenbetriebe 20 führen Aufrufe
für den
Arbeitsschlangen-Controller 16 aus, um in der Arbeitsschlange 12 eingereiht
zu werden.
-
Die Arbeitsschlange 12 unterstützt ein
Verfahren zum Verwalten einzelner Arbeitsgegenstände, die von irgendeinem Faden
22 im Faden-Pool 14 ausgeführt werden können. In
einer Ausführungsform
sind die in die Schlange eingereihten Arbeitsgegenstände WIN32
API-Aufrufe, die einzeln von Fadenbetrieben 24 umwickelt
und dem Windows NT-Betriebssystem-("NT")-E/A-Durchführungsport zur
Verfügung
gestellt werden.
-
Die Arbeitsschlange 12 kann
sich in einem von drei Zuständen
befinden: gestoppt, unterbrochen und laufend. Wenn die Arbeitsschlange
instantiiert wird, befindet sie sich anfänglich im gestoppten Zustand.
Die für
die Einreihung in die Arbeitsschlange 12 gesuchten Fadenbetriebe
werden abgelehnt, wenn sich die Arbeitsschlange im gestoppten Zustand
befindet. Wenn sich die Arbeitsschlange 12 im unterbrochenen
Zustand befindet, sind die Fäden 22 im
Wartezustand und führen
keine Fadenbetriebe 24 durch. Jedoch können neue Fadenbetriebe in
der Arbeitsschlange 12 eingereiht werden, wenn sich die Arbeitsschlange
im unterbrochenen Zustand befindet. Wenn die Arbeitsschlange 12 läuft, führen Fäden 22 Fadenbetriebe 24 aus,
und es können
neue Fadenbetriebe die die Schlange eingereiht werden.
-
Der Faden-Pool-Manager 18 instantiiert
Fäden 22 im
Faden-Pool 14,
indem Start-Faden-Anforderungen verwendet werden, die an den Arbeitsschlangen-Controller 16 ausgegeben
werden. Fäden 22 sind
für die
Ausführung
der Fadenbetriebe 24 verfügbar. Da die Erzeugung von
Fäden hinsichtlich
der Betriebssystem-Ressourcen-Erfordernisse teuer ist, stellt ein
Pool von Fäden
die Fähigkeit
bereit, neue Fadenbetriebe auszuführen, ohne auf die Erzeugung eines
neuen Fadens warten zu müssen.
-
Der Arbeitsschlangen-Controller 16 sorgt
für die
Fähigkeit,
den Arbeitsfluss (d. h. die Ausführung der
Fadenbetriebe 24) eng mit dem Faden-Pool-Manager 18 zu
steuern. Der Faden-Pool 14 kann über den Arbeitsschlangen-Controller 16 vom
Faden-Pool-Manager 18 z. B. gestartet, gestoppt und unterbrochen
werden. Wenn der Faden-Pool 14 gestoppt wird, wird der
Arbeitsschlangen-Controller 16 die Fadenbetriebe nicht
mehr länger
in die Arbeitsschlange 12 einreihen, noch nicht begonnene
Fadenbetriebe 24 werden aus der Schlange genommen und nicht
ausgeführt,
und in Ausführung
befindliche Fadenbetriebe dürfen
zum Abschluss gebracht werden. Wenn der Faden-Pool 14 unterbrochen
wird; wird der Arbeitsschlangen-Controller damit fortfahren, die
Fadenbetriebe 20 in der Arbeitsschlange 12 einzureihen,
und Fadenbetriebe 24, die noch nicht gestartet sind, werden
nicht aus der Schlangen herausgenommen, bis der Faden-Pool-Zustand
auf laufend geändert
wird.
-
In einer anderen Ausführungsform
der Erfindung wird eine Mehrzahl von Instanzen des Systems 10 erzeugt,
um mehrere Arbeitsschlangen und Faden-Pools bereitzustellen. Zum
Beispiel können
verschiedene Applikationen unterschiedliche Ressourcen-Erfordernisse haben.
Solchermaßen
kann der mit einer Applikation verknüpfte Faden-Pool kleiner sein
als der mit einer anderen Applikation verknüpfte.
-
Der Arbeitsschlangen-Controller 16 stellt auch
die Fähig keit
bereit, um vorübergehend
Fäden zum
Faden-Pool 14 hinzuzufügen.
Dieses Merkmal kann im Zusammenhang mit unabhängigen Arbeitsschlangen und
Faden-Pools für
verschiedene Applikationen nützlich
sein. Wenn z.B. während
einer bestimmten Zeitspanne eine erste Applikation einen geringeren
Bedarf an der Berechnung von Ressourcen als eine zweite Applikation
hat, dann können
einigender Fäden
in dem mit der ersten Applikation verknüpften Faden-Pool zeitweilig
am Faden-Pool der zweiten Applikation angehängt werden. Wenn die Zeitspanne
verstrichen ist, können
die Fäden
vom Faden-Pool der zweiten Applikation entfernt und zum Faden-Pool
der ersten Applikation zurückgegeben werden.
-
2 ist
ein Zustandsdiagramm, das mögliche
Zustände
des Faden-Pools und Übergänge zwischen
den Zuständen
zeigt. Die Zustände
des Faden-Pools 14 sind gestoppt, unterbrochen und laufend.
Die Verfahren innerhalb eines jeden der Blöcke sind die Namen der Verfahren,
die bewirken, dass die Arbeitsschlange in den verknüpften Zustand übergeht.
Die Konvention für
diese Diagramme ist, den anfänglichen
Zustand als vom Startknoten aus eintretenden zu zeigen.
-
Die Stopp-Schlange- und Wiederaufnahme-Schlange-Verfahren
bewirken, dass die Arbeitsschlange in den gestoppten Zustand übergeht,
die Unterbreche-Schlange- und das Start-Schlange-Verfahren bewirken, dass die Arbeitsschlange
in den unterbrochenen Zustand übergeht,
und das Wiederaufnahme-Schlange-Verfahren bewirkt, dass die Arbeitsschlange
in den laufenden Zustand übergeht. Wenn
sich der Faden-Pool 14 im gestoppten Zustand befindet,
bewirkt das Aufrufen des Start-Schlange-Verfahrens, dass der Faden-Pool
vom gestoppten Zustand zum unterbrochenen Zustand übergeht.
Das Aufrufen von entweder dem Wiederaufnahme-Schlange-Verfahren oder dem
Stopp-Schlange-Verfahren, wenn sich der Faden-Pool 14 im
unterbrochenen Zustand befindet, bewirkt; dass der Faden-Pool im
gestoppten Zustand bleibt.
-
Wenn sich der Faden-Pool 14 im
unterbrochenen Zustand befindet, bewirkt das Aufrufen des Stopp-Schlange-Verfahrens
den Faden-Pool zum Übergang
in den gestoppten Zustand. Das Aufrufen des Wiederaufnahme-Schlange-Verfahren
veranlasst den Faden-Pool zum Übergang
vom unterbrochenen Zustand zum laufenden Zustand.
-
Der Faden-Pool 14 bleibt
im unterbrochenen Zustand, wenn das Unterbreche-Schlange-Verfahren aufgerufen
wird, während
sich der Faden-Pool gegenwärtig
im unterbrochenen Zustand befindet.
-
Wenn sich der Faden-Pool 14 im
laufenden Zustand befindet, veranlasst das Aufrufen des Stopp-Schlange-Verfahrens
den Faden-Pool zum Übergang
in den gestoppten Zustand, und das Aufrufen des Unterbreche-Schlange-Verfahrens
veranlasst den Faden-Pool zum Übergang
in den unterbrochenen Zustand. Das Aufrufen des Wiederaufnahme-Schlange-Verfahrens,
wenn sich der Faden-Pool in den laufenden Zuständen befindet, veranlasst den Faden-Pool
zum Bleiben im laufenden Zustand.
-
Die Zustand-Übergangslinien schließen durch
Konvention Markierungen ein, die auf die Funktion hinweisen, die
den Zustand-Übergang
bewirkt, der von Aktionen gefolgt wird, die durchgeführt werden,
wenn der Übergang
erfolgt. Der Übergang vom
unterbrochenen Zustand zum gestoppten Zustand wird z. B. durch die
Stopp-Schlange-Funktion veranlasst. Die Änderung im Zustand führt dazu, dass
die in Schlangen eingereihten Arbeitsfäden für die Beendigung aus der Schlange
freigegeben werden. Weitere Details werden in den Figuren, die folgen,
bereitgestellt.
-
3 zeigt
das Verhältnis
zwischen den 3A und 3B, die zusammen ein Klassendiagramm
einer Ausführungsform
einer Klassenanordnung zum Verwalten eines Pools von wiederverwendbaren
Fäden und
eine Arbeitsschlange der Fadenbetriebe umfassen. Die Figur verwendet
eine herkömmliche
Objekt-Modellier-Technik(OMT)-Bezeichnung, um die Klassen und Klassenverhältnisse
zu bezeichnen.
-
Ein Objekt des Klassen-Arbeitsschlangen-Faden-Pools
verwaltet Objekte der Fadenklasse, und Objekte des Klassen-Arbeitsschlangen-Zustand-Controllers
erben vom Fadenbetrieb der abstrakten Klasse. Die Fäden und
Fadenbetriebsklassen werden in der ebenfalls anhängigen Patentanmeldung detailliert
beschrieben.
-
Ein Arbeitsschlangen-Objekt verfügt über ein Arbeitsschlangen-Zustand-Controller-Objekt,
das ein Arbeitsschlangen-Faden-Pool-Objekt
und ein Arbeitsschlangen-Implementierung-Objekt hat. Die Pfeilspitze
auf der Linie, die die Arbeitsschlangen-Klasse mit dem Arbeitsschlangen-Zustand-Controller
verkettet, weist darauf hin, dass es sich um eine Ein-Wege-Verkettung
handelt. Das bedeutet, dass die Arbeitsschlange auf den Arbeitsschlangen-Zustand-Controller
verweisen kann, aber der Controller nicht auf die Arbeitsschlange
verweisen kann. Wenn eine Verkettung keine Pfeilspitzen hat (z. B.
zwischen dem Arbeitsschlangen-Faden-Pool und dem Arbeitsschlangen-Zustand-Controller),
ist sie bidirektional, wobei Objekte auf jeder Seite der Verkettung
aufeinander verweisen können.
-
Ein Arbeitsschlangen-Zustand-Controller-Objekt
hat Objekte des Arbeitsschlangen-Gestoppt-Zustands, Arbeitsschlangen-Unterbrochen-Zustands
und Arbeitsschlangen-Laufend-Zustands. Jedes der verschiedenen Zustand-Objekte erbt
vom der Klasse Arbeitsschlangen-Zustand, der von einem Objekt der
Arbeitsschlangen-Zustand-Controller-Klasse
aufrechterhalten wird.
-
Die Arbeitsschlangen-Zustände-Klasse
kapselt die aufgezählten
Zustand-Werte von gestoppt, laufend, unterbrochen und unbekannt
ein.
-
Die Attribute und Verfahren der unterschiedlichen
Klassen werden in den Paragraphen, die folgen, beschrieben.
-
Arbeitsschlangen-Klasse
-
Die Arbeitsschlangen-Klasse sorgt
für die Schnittstelle,
mittels der die Fadenbetriebe in der Arbeitsschlange 12 eingereiht
werden und der Faden-Pool 14 verwaltet wird.
-
Das Anhänge-Faden-Verfahren der Arbeitsschlangen-Klasse
kann verwendet werden, um einen Faden zum Faden-Pool 14 hinzuzufügen. Solchermaßen können zu
Zeiten, in denen mehr Arbeit durchgeführt werden muss (mittels Fadenbetrieben in
der Arbeitsschlange 12), zusätzliche Fäden zum Faden-Pool 14 hinzugefügt werden,
indem das Anhänge-Faden-Verfahren
verwendet wird. Der Faden bleibt im Faden-Pool 14, bis
das Stopp-Schlange-Verfahren durchgeführt wird. Das Stopp-Schlange-Verfahren
entleert die Arbeitsschlange 12 von Fadenbetrieben 24,
gibt diejenigen Fäden 22 zurück, die
mittels der Verwendung des Anhänge-Faden-Verfahrens
zum Faden-Pool 14 hinzugefügt wurden, um Punkte außerhalb
des Systems 10 zu steuern, und unterbricht diejenigen Fäden
22,
die mittels Verwendung des Erzeuge-Fäden-Verfahrens der Arbeitsschlange-Faden-Pool-Klasse
erzeugt wurden.
-
Das Start-Schlangen-Verfahren wird
verwendet, um den Zustand der Arbeitsschlange 12 vom gestoppten
Zustand auf den unterbrochenen Zustand zu ändern.
-
Das Stopp-Schlange-Verfahren wird
verwendet, um den Zustand der Arbeitsschlange 12 auf den gestoppten
Zustand zu ändern.
-
Das Unterbreche-Schlange-Verfahren
wird verwendet, um den Zustand der Arbeitsschlange 12 vom
laufenden Zustand auf den unterbrochenen Zustand zu ändern.
-
Das Wiederaufnahme-Schlange-Verfahren wird
verwendet, um den Zustand der Arbeitsschlange 12 vom unterbrochenen
Zustand auf den laufenden Zustand zu ändern.
-
Das Schlangenarbeitsverfahren wird
verwendet, um einen Fadenbetrieb 20 zur Arbeitsschlange 12 hinzuzufügen.
-
Das Hole-Arbeitsschlangen-Zustand-Verfahren
gibt den aktuellen Zustand zur Arbeitsschlange 12 zurück.
-
Das Hole-Schlangen-Tiefen-Verfahren
gibt die Anzahl der Fadenbetriebe in der Arbeitsschlange 12 zurück, die
auf ihre Ausführung
warten.
-
Das Wartezustand-Synchronisier-Verfahren fordert
das entsprechende Verfahren der Arbeitsschlangen-Zustand-Controller-Klasse zu warten
auf, bis die Schlange im aktuellen Zustand im Wartezustand ist.
Die Arbeitsschlange ist im Wartezustand; wenn es in der Arbeitsschlange
keine eingereihten Fadenbetriebe gibt.
-
Arbeitsschlangen-Faden-Pool-Klasse
-
Die Arbeitsschlangen-Faden-Pool-Klasse schließt Attribute
und Verfahren zum Verwalten eines Faden-Pools 14 ein.
-
Max-Fäden sind die im Faden-Pool 14 erlaubte
maximale Anzahl von Fäden.
-
Die Anzahl der Fäden ist die im Faden-Pool 14 vorhandene
Anzahl von Fäden.
-
Das Faden-Pool-Attribut verweist
auf die Objekte der Klasse Faden.
-
Das Fadenbetrieb-Attribut verweist
auf den Betrieb, den ein Faden ausführt.
-
Das Faden-Speicher-Manager-Attribut
verweist auf den Speicherbereich, in dem die Faden-Objekte zugeordnet
werden.
-
Das Zuweise-Verfahren implementiert
die Zuweisung von einem Objekt zu einem anderen. Es ist auch als
Zuweisungsoperator bekannt. In diesem Fall wird es erklärt, aber
nicht bestimmt (keine Code-Implementierung), da die Zuweisung nicht
unterstützt
wird. Wenn ein Programmierer versuchen würde, ein Objekt einem anderen
zuzuordnen, würde
der Compiler einen Fehler melden, anstatt den Fehler-Zuweisungsoperator
zu verwenden.
-
Das Start-Fäden-Verfahren startet ausdrücklich die
Fäden im
Pool.
-
Das Warten-Auf-Vollendung-Verfahren
wird aufgerufen, um den Aufrufer zu unterbrechen, bis alle Fäden im Pool
abgeschlossen sind.
-
Das Erzeuge-Fäden-Verfahren ruft das Betriebssystem
dazu auf, die Fäden
des Faden-Pools 14 zu erzeugen.
-
Das Zerstöre-Fäden-Verfahren ruft das Betriebssystem
auf, die Fäden
des Faden-Pools 14 freizugeben.
-
Arbeitsschlangen-Zustand-Controller-Klasse
-
Die Arbeitsschlangen-Zustand-Controller-Klasse
schließt
Attribute und Verfahren für
die Schnittstellenverbindung zwischen der Faden-Pool-Implementierung
und der Arbeitsschlangen-Implementierung
ein.
-
Der Arbeitsfaden-Zählwert ist
die Anzahl der dem Faden-Pool zugeordneten "Arbeiter"-Fäden.
Ein "Arbeiter"-Faden ist ein Ausführungsfaden,
worin der Begriff Arbeiter-Faden verwendet wird, um Fäden im Pool
von anderen Fäden
zu unterscheiden.
-
Der Zählwert der angehängten Fäden zählt die
Anzahl der Fäden
im Faden-Pool 14, die aus dem Anhänge-Faden-Verfahren hervorgeht.
-
Das Kein-Betrieb-Attribut ist ein
Betrieb, der keine Arbeit durchführt
und der im Windows NT-Betriebssystem-E/A-Durchführungsport eingereiht wird. Kein-Betriebsobjekte,
die am E/A-Durchführungsport in
die Schlange eingereiht werden, bewirken, dass die Fäden aufwachen,
die Tue-Nichts-Betriebe durchführen
und ein weiteres in die Schlange eingereihtes Kein-Betrieb- Objekt aus der Schlange
auswerfen.
-
Das Betrieb-Hauptverfahren ruft das
aus der Arbeitsschlange 12 herausgenommene Fadenbetrieb-Objekt
auf.
-
Das Anhänge-Faden-Verfahren erklärt einen C-Faden
mit dem aktuellen Objekt initialisiert, inkrementiert den Zählwert der
angehängten
Fäden und hängt das
Faden-Objekt an den aktuellen Faden an. Der aktuelle Faden der Ausführung wird
in ein C-Faden-Objekt
eingewickelt und eingehüllt,
damit es mit einer Objektorientierten Syntax und Semantik verarbeitet
wird. Das Faden-Objekt
wird dann in den Faden-Pool gefügt,
wo es bleibt, bis die Arbeitsschlange gestoppt wird. Wenn der Faden
vom Faden-Objekt befreit wird, wird die Steuerung zum Anhänge-Faden-Verfahren
zurückgeführt, der
Zählwert
der angehängten
Fäden gesenkt
und die Steuerung an das Arbeitsschlange-Verfahren zurückgegeben.
-
Die Verfahren Starte-Schlange, Stopp-Schlange,
Unterbreche-Schlange,
Wiederaufnehme-Schlange, Schlangen-Arbeit, Hole-Schlangenzustand
und Hole-Schlangentiefe werden von den entsprechenden Verfahren
der Arbeitsschlangen-Klasse aufgerufen und rufen durch abhängig vom
aktuellen Zustand der Arbeitsschlange 12 zu den Verfahren
der Arbeitsschlangen-Gestoppt-, -Unterbrochen- und -Laufenden-Zustand-Klassen.
-
Das Abwickle-Schlangenarbeitsverfahren ruft
zum Schlangenarbeitsverfahren der Arbeitsschlangen-Implementierungsklasse
durch.
-
Das Abwickle-Ausreihungs-Arbeitsverfahren
ruft zum Ausreihungs-Arbeitsverfahren der Arbeitsschlangen-Implementierungsklasse
durch.
-
Das Erhalte-Aktuelles-Arbeitsschlangen-Zustand-Verfahren
gibt den Zustand der Arbeitsschlange 12 auf der Grundlage
des Zustands des Arbeitsschlangen-Zustände-Objekts zurück.
-
Das Schalte-Zustand-Verfahren ändert den Zustand
der Arbeitsschlange auf synchronisierte Weise. Das Verfahren fordert
ein Synchronisierungsobjekt auf zu warten, bis irgendeine andere
Zustandsänderung
beendet ist. Dann wird der aktuelle Zustand verlassen (durch das
Aufrufen des Verlasse-Zustand-Verfahrens im Zustand), es wird auf
den neuen Zustand verwiesen, und der neue Zustand wird betreten
(indem das Enter-Zustand-Verfahren im Zustand aufgerufen wird).
Die Fadensynchronisierung wird dann freigegeben.
-
Die Start-Arbeitsfäden beginnen
mit der Ausführung
der Fäden
im Faden-Pool 14.
-
Das Freigabe-Der-In-Die-Schlange-Eingereihten-Arbeitsfäden-Verfahren reiht für jeden
Faden im Pool 14 abhängig
vom eingegebenen Parameter entweder ein Kein-Betrieb-Objekt oder
einen NULL-Arbeit-Betrieb (z. B. eine 0 zum E/A-Durchführungsport)
in die Schlange ein. NULL-Betriebe veranlassen, dass ein Faden endet,
und ein Kein-Betrieb veranlasst einen Faden, den Kein-Betrieb auszuführen und
in einen neuen Zustand zu treten.
-
Die Betrieb-Synch-Beginn- und Betrieb-Synch-Ende-Verfahren
werden verwendet, um die Fadensynchronisierung im Schalte-Zustände-Verfahren
zu beginnen und zu beenden.
-
Das Wartezustand-Synchronisier-Verfahren fordert
den aktuellen Zustand zu warten auf, bis die Arbeitsschlange im
aktuellen Zustand im Wartezustand ist.
-
Arbeitsschlangen-Implementierungsklasse
-
Die Arbeitsschlangen-Implementierungsklasse
implementiert die Arbeitsschlange 12, indem die vom Windows
NT-Betriebssystem bereitgestellten E/A-Durchführungsports verwendet werden.
-
Das Schlangen-Abwickleattribut ist
eine Abwicklung für
das E/A-Durchführungsport.
-
Das Schlangentiefenattribut ist ein
verriegelter Zählwert
der Anzahl von Betrieben an der Schlange. Ein verriegelter Zählwert ist
ein Wort im Speicher, das auf eine nicht teilbare Weise inkrementiert,
gesenkt oder mit einem neuen Wert aktualisiert wird. Ein unabhängiges Synchronisierungsobjekt
ist unnötig,
da die Synchronisation in dem verriegelten Zählwert eingebaut ist.
-
Das Schlangenarbeitsverfahren inkrementiert
das Schlangentiefenattribut und reiht den Fadenbetrieb, auf den
verwiesen wird, in das E/A-Durchführungsport ein.
-
Das Schlangen-Null-Arbeit-Verfahren
inkrementiert die Schlangentiefe und reiht den Wert 0 in das E/A-Durchführungsport
ein.
-
Das Ausreihungs-Arbeit-Verfahren
erhält
einen Zeiger für einen
Fadenbetrieb vom E/A-Durchführungsport,
senkt die Schlangentiefe und gibt den Zeiger zurück.
-
Das Erhalte-Schlangentiefe-Verfahren
gibt die Anzahl der im E/A-Durchführungsport eingereihten Fadenbetriebe
zurück.
-
Arbeitsschlangen-Zustandklasse
-
Die Arbeitsschlangen-Zustandklasse
verwaltet den Zustand der Arbeitsschlange 12.
-
Das Besetzt-Faden-Zählwert-Attribut
ist ein gezähltes
Ereignis, das signalisiert, wann die Anzahl der besetzten Fäden 0 ist;
d. h. wenn die Arbeitsschlange 12 0 Fadenbetriebe hat.
-
Die Enter- und Exit-Zustand-Verfahren
rufen abhängig
vom aktuellen Zustand der Arbeitsschlange durch zu den entsprechenden
Verfahren in den Klassen Arbeitsschlange-Gestoppt und Arbeitsschlange-Unterbrochen.
-
Die Start-Schlangen-, Stopp-Schlangen-, Unterbreche-Schlangen
und Wiederaufnahme-Schlange-Verfahren rufen abhängig vom aktuellen Zustand
der Arbeitsschlange durch zum passenden Verfahren der entsprechenden
Verfahren in den Klassen Arbeitsschlangen-Gestoppt-Zustand, Arbeitsschlangen-Unterbreche-Zustand
und Arbeitsschlangen-Laufend-Zustand.
-
Das Schlangen-Arbeitsverfahren ruft
zurück zum
Arbeitsschlangen-Zustand-Controller, um die Arbeit aus der Schlange
zum E/A-Durchführungsport zu
entnehmen.
-
Die Freigabe-Schlangen-Arbeitsfäden, Start-Arbeitsfäden und
Schalte-Zustände-Verfahren rufen
durch zu den entsprechenden Verfahren im Arbeitsschlangen-Zustand-Controller.
-
Das Wartezustand-Synchronisier-Verfahren wartet
auf das Besetzt-Faden-Gezählt-Ereignis,
um zu signalisieren, dass die Arbeitsschlange im Wartezustand ist,
und kehrt dann zurück.
-
Das Inkrementier-Besetzt-Faden-Verfahren inkrementiert
die Anzahl der Besetzt-Fäden
im aktuellen Zustand, und das Senke-Besetzt-Faden-Verfahren senkt die Zahl
der Besetzt-Fäden
im aktuellen Zustand.
-
Arbeitsschlange-Gestoppt-Zustand-Klasse
-
Die Arbeitsschlange-gestoppt-Zustand-Klasse
schließt
Attri bute und Verfahren ein, die das Verhalten der Arbeitsschlange
im gestoppten Zustand implementieren.
-
Das Kein-Betrieb-Attribut ist ein
Fadenbetrieb, der keine Arbeit durchführt, die für die Fadenausführung rückgeführt wird,
wenn im gestoppten Zustand aus der Schlange herausgenommen wird.
-
Der Faden-Zählwert ist die Anzahl der Fäden 22 im
Faden-Pool 14.
-
Das Enter-Zustand-Verfahren gibt
alle Fäden zur
Beendigung frei, und das Exit-Zustand-Verfahren inkrementiert den
Faden-Besetzt-Zählwert für jeden Faden
im Faden-Pool und ruft das Verfahren Start-Arbeitsfäden auf.
-
Das Start-Schlange-Verfahren ändert die
Arbeitsschlange auf den unterbrochenen Zustand, und das Unterbrochen-Schlange-Verfahren ruft das Start-Schlange-Verfahren
mit demselben Ergebnis auf.
-
Das Schlangenarbeitsverfahren tut
nichts, da die Arbeit nicht im gestoppten Zustand in die Schlange
eingereiht werden kann.
-
Das Ausreihungs-Arbeitsverfahren
ruft den Arbeitsschlangen-Zustand-Controller
auf, um vom E/A-Durchführungsport
einen Fadenbetrieb zu erhalten. Wenn der Fadenbetrieb gültig ist,
wird stattdessen ein Kein-Betrieb rückgeführt. Dies erlaubt der Arbeitsschlange,
im gestoppten Zustand zu entleeren. Wenn die rückgeführte Arbeit NULL (ein Wert
0) ist, wird der Besetzt-Faden-Zählwert gesenkt
und NULL rückgeführt.
-
Arbeitsschlangen-Unterbrochen-Zustand-Klasse
-
Der Arbeitsschlangen-Unterbrochen-Zustand
implementiert das Verhalten der Arbeitsschlange im unterbrochenen
Zustand.
-
Das Faden-Unterbrecher-Attribut ist
ein Ereignis, das gesetzt wird, wenn Fäden ablaufen dürfen, und
es wird gelöscht,
wenn Fäden
unterbrochen werden sollen.
-
Das Kein-Betrieb-Attribut ist ein
Fadenbetrieb, der nichts tut, und das vom Ausreihungs-Arbeitsverfahren
rückgegeben
wird, nachdem der Faden-Unterbrecher signalisiert wird.
-
Das Enter-Zustand-Verfahren setzt
das Faden-Unterbrecher-Ereignis
zurück,
um das Ausreihen der Arbeit zu sperren und alle Fäden mit
einem Kein-Betrieb freizugeben. Dies erzwingt, dass die Fäden herausgenommen
werden und in den unterbrochenen Zustand eintreten und nach dem
Faden-Unterbrecher-Ereignis sperren.
-
Das Exit-Zustand-Verfahren setzt
das Faden-Unterbrecher-Ereignis,
wodurch erlaubt wird, dass die Ausreihungsbetriebe fortfahren.
-
Das Stopp-Schlange-Verfahren ändert die Arbeitsschlange
auf den gestoppten Zustand.
-
Das Wiederaufnahme-Schlange-Verfahren ändert die
Arbeitsschlange auf den laufenden Zustand.
-
Das Ausreihungs-Arbeitsverfahren
senkt den Besetzt-Faden-Zählwert.
Der Faden ist nicht belegt, wenn er auf das Signal des Faden-Unterbrechers
wartet. Das Ausreihungs-Arbeitsverfahren wartet dann darauf, dass
der Faden-Unterbrecher signalisiert wird, woraufhin der Besetzt-Faden-Zählwert inkrementiert
wird und ein Kein-Betrieb rückgeführt wird.
Der Faden führt
dann den Kein-Betrieb aus und wartet auf den nächsten verfügbaren Betrieb.
-
Arbeitsschlangen-Laufend-Zustand-Klasse
-
Die Arbeitsschlangen-Laufend-Zustand-Klasse
implementiert das Verhalten der Arbeitsschlange im laufenden Zustand.
-
Das Stopp-Schlange-Verfahren ändert den Zustand
der Arbeitsschlange von laufend auf gestoppt, und das Unterbreche-Schlange-Verfahren ändert den
Zustand der Arbeitsschlange von laufend auf unterbrochen.
-
Das Ausreihungs-Arbeitsverfahren
senkt als erstes den Besetzt-Faden-Zählwert., da ein Faden nicht
belegt ist, wenn er auf Arbeit von der Arbeitsschlange wartet. Das
Verfahren erhält
dann den nächsten
Fadenbetrieb durch das Aufrufen der Arbeitsschlangen-Implementierung.
Der Besetzt-Faden-Zählwert
wird dann inkrementiert und ein Zeiger wird zum herausgenommenen
Fadenbetrieb zurückgeführt.
-
Alle relevanten Attribute und Verfahren,
die Glieder verschiedener Klassen sind, werden weiter in den Objekt-Interaktionsdiagrammen
beschrieben, die folgen.
-
4 ist
ein Objekt-Interaktionsdiagramm, das das Einreihen in die Schlange
eines Fadenbetriebs darstellt, wenn sich der Faden-Pool in einem laufenden
oder unterbrochenen Zustand befindet. In diesem Objekt-Interaktionsdiagramm
sowie in anderen, die folgen, wurden viele der "Rückkehr"-Steuerlinien weggelassen,
um die Überfüllung in
den Zeichnungen zu reduzieren. Es wird jedoch geschätzt sein, dass
Rückführungen,
selbst wenn sie nicht gezeigt werden, einbegriffen sind.
-
Die Start- und Endknoten stellen
ein Aufrufprogramm, z. B. den Faden-Pool-Manager 18 (1), dar. Um einen Fadenbetrieb 20 in
die Schlange einzureihen, wird das Schlangen-Arbeitsverfahren des
Arbeitsschlangen-Objekts mit Bezug auf den einzureihenden Fadenbetrieb
aufgerufen, der durch zum Schlangen-Arbeitsverfahren des Arbeitsschlangen-Zustand-Controller-Objekts
aufgerufen wird.
-
Der Arbeitsschlangen-Zustand-Controller ruft
sein Erhalte-Aktuelles-Arbeitsschlangen-Zustand-Verfahren
auf, um den aktuellen Zustand des Faden-Pools 14 zu erhalten.
Das Erhalte-Aktuelle-Arbeitsschlangen-Zustand-Verfahren ruft das
Warteverfahren des Betriebs-Synchr.-Objekt dazu auf, mit anderen
Fäden zu
synchronisieren. Das bedeutet, dass, wenn ein anderer Faden in einem
kritischen Abschnitt ausgeführt
wird (z. B. indem er den Zustand des Faden-Pools ändert),
das Warteverfahren den Aufruffaden dazu veranlasst zu warten, bis
der andere Faden seinen kritischen Abschnitt ausgeführt hat,
und die Steuerung wird dann zum Warte-Schlangen-Zustand-Controller
zurückgeführt. Das
Erhalte-Aktuelles-Arbeitsschlangen-Zustand-Objekt erhält dann
einen Zeiger für
das aktuelle Zustand-Objekt (für
dieses Diagramm ein Zeiger für
ein Arbeitsschlangen-Laufend-Zustand-Objekt) und löst dann die
Synchronisation aus. Das Erhalte-Aktuelles-Arbeitsschlangen-Zustand-Verfahren
gibt dann den Zeiger an das Schlangen-Arbeitsverfahren des Arbeit-Zustand-Controller-Objekts
zurück.
-
Mit dem Zeiger für das Arbeitsschlangen-Laufend-Zustand-Objekt ruft der Arbeitsschlangen-Zustand-Controller
das Schlangenarbeitsverfahren auf, das den Arbeitsschlangen-Controller-Bezug ("Bezug" bedeutet in diesem
Fall Zeiger) sichert. Das Arbeitsschlangen-Laufend-Zustand-Objekt
ruft dann das Abwickle-Schlangen-Arbeitsverfahren
zurück
in den Arbeitsschlangen-Zustand-Controller, der das Schlangenarbeitsverfahren
im Arbeitsschlangen-Implementierung-Objekt aufruft. Das Arbeitsschlangen-Implementierung-Objekt
inkrementiert die Schlangentiefe und gibt die Steuerung an den Arbeitsschlangen-Zustand-Controller
zurück.
Die Steuerung wird schließlich
zum ursprünglichen
aufrufenden Programm zurückgeführt.
-
5 ist
ein Objekt-Interaktionsdiagramm, das den Übergang des Faden-Pools von
einem laufenden in einen unterbrochenen Zustand darstellt. In einer
Verwendungsform der Erfindung steuert der Faden-Pool-Manager 18 den
Zustand des Faden-Pools 14. Der Faden-Pool-Manager 18 ruft
das Unterbreche-Schlange-Verfahren
des Arbeitsschlangen-Objekts auf, um die Zustandsänderung
von laufend auf unterbrochen zu starten, die zum Unterbreche-Schlange-Verfahren
des Arbeitsschlangen-Zustand-Controller-Objekts durchruft.
-
Das Arbeitsschlangen-Zustand-Controller-Objekt
erhält
dann mittels Verwendung des Erhalte-aktuellen-Arbeitsschlangen-Zustands,
wie oben beschrieben, den aktuellen Zustand des Faden-Pools 14.
Der Zeiger für
das Arbeitsschlangen-Laufend-Zustand-Objekt wird dann verwendet, um das Unterbreche-Schlange-Verfahren
im Objekt aufzurufen. Das Arbeitsschlangen-Laufend-Zustand-Objekt
ruft zurück
zum Schalte-Zustände-Verfahren
des Arbeitsschlangen-Zustand-Controller-Objekts, das die Fadensynchronisierung
mit dem Warteverfahren aufruft, verlässt den aktuellen Zustand und zeigt
den neuen Zustand an. Das bedeutet, dass der Zeiger auf das Arbeitsschlangen-Unterbrochen-Zustand-Objekt
geschaltet wird. Wenn ein Zustand-Übergang erfolgt, haben sowohl
der alte Zustand als auch der neue Zustand eine Chance, um irgendeine
Austritts- oder Eintrittstätigkeit
durchzuführen.
Das "Verlasse Zustand
( )"-Verfahren
wird vom alten Zustand für
die Austritttätigkeiten
verwendet.
-
Das Schalte-Zustand-Verfahren ruft
dann das Enter-Zustand-Verfahren
des Arbeitsschlangen-Unterbrochen-Zustand-Objekts auf. Das Enter-Zustand-Verfahren
setzt das Unterbrecher-Ereignis zurück. Mit anderen Worten wird
die Synchronisation im Unter brecher-Ereignis freigegeben, das im wesentlichen
irgendwelche unterbrochenen Fäden freigibt,
die auf das "Unterbrecher-Ereignis" warten. Dann ruft
das Enter-Zustand-Verfahren mit einem NOP-(Kein-Betrieb)-Parameter
zurück
zum Freigabe-Schlangen-Eingereiht-Arbeitsfäden-Verfahren, um anzuzeigen,
dass ein Kein-Betrieb für
jeden Faden in die Schlange eingereiht wird. Das Schlangenarbeitsverfahren
des Arbeitsschlangen-Implementierung-Objekt wird mit einem Kein-Betrieb-Parameter für jeden
der Fäden 22 im
Faden-Pool 14 aufgerufen. Jeder Faden wird schließlich einen
Kein-Betrieb aus der Schlange ausreihen, was bewirken wird, dass
der Faden in den unterbrochenen Zustand tritt. Die Steuerung wird
dann zum Arbeitsschlangen-Zustand-Controller-Objekt zurückgeführt, der die Fadensynchronisierung
auslöst
und die Steuerung zum aufrufenden Programm zurückführt.
-
6 ist
ein Objekt-Interaktionsprogramm, das den Übergang des Faden-Pools von
einem laufenden auf einen gestoppten Zustand darstellt. Der Faden-Pool-Manager 18 ruft
das Stopp-Schlange-Verfahren
des Arbeitsschlangen-Objekts auf, um die Zustandsänderung
von laufend auf gestoppt zu starten, die durch zum Stopp-Schlange-Verfahren des
Arbeitsschlangen-Zustand-Controller-Objekts aufruft.
-
Das Arbeitsschlangen-Zustand-Controller-Objekt
erhält
dann mittels Verwendung des Erhalte-Aktuellen-Arbeitsschlangen-Zustand-Objekts
den aktuellen Zustand des Faden-Pools 14. Der Zeiger für das Arbeitsschlangen-Laufend-Zustand-Objekt wird
dann verwendet, um das Stopp-Schlange-Verfahren im Objekt aufzurufen.
Das Arbeitsschlangen-Laufend-Zustand-Objekt ruft zurück zum Schalte-Zustände-Verfahren
des Arbeitsschlangen-Zustand-Controller-Objekts mit dem ARBEITS_WARTESCHLANGEN_GESTOPPT-Parameter,
das die Fadensynchronisierung mit dem Warteverfahren aufruft, verlässt den
aktuellen Zustand und zeigt den neuen Zustand an. Das bedeutet,
dass der Zeiger auf das Arbeitsschlangen-Gestoppt-Zustand-Objekt geschaltet
wird.
-
Das Schalte-Zustand-Verfahren ruft
dann das Enter-Zustand-Verfahren
des Arbeitsschlangen-Gestoppt-Zustand-Objekts auf. Das Enter-Zustand-Verfahren
bildet das Gegenstück
des Verlasse-Zustand-Verfahrens. Es wird aufgerufen, um irgendwelche
Eintritts tätigkeiten
im neuen Zustand durchzuführen,
wenn ein Zustand-Übergang
stattfindet. Dann ruft das Enter-Zustand-Verfahren mit einem NULL-Parameter
zurück
zum Freigabe-Schlangen-Arbeitsfäden-Verfahren, um anzuzeigen,
dass für
jeden Faden eine Null Schlangeneingereiht werden muss. Das Schlangen-Null-Arbeitsverfahren
des Arbeitsschlangen-Implementierung-Objekts wird für jeden
der Fäden 22 im
Faden-Pool 14 aufgerufen. Jeder Faden wird schließlich einen
NULL-Betrieb ausreihen, was bewirken wird, dass der Faden in den gestoppten
Zustand eintritt. Die Steuerung wird dann zum Arbeitsschlangen-Zustand-Controller-Objekt rückgeführt, das
die Fadensynchronisierung freigibt und die Steuerung zum aufrufenden
Programm zurückgibt.
-
7 ist
ein Objekt-Interaktionsdiagramm, das den Übergang des Faden-Pools von
einem unterbrochenen auf einen laufenden Zustand darstellt. Der
Faden-Pool-Manager 18 ruft das Wiederaufnahme-Schlange-Verfahren
des Arbeitsschlangen-Objekts auf, um die Zustandsänderung
von unterbrochen auf laufend zu beginnen, die durch zum. Wiederaufnahme-Schlange-Verfahren
des Arbeitsschlangen-Zustand-Controller-Objekts aufruft.
-
Das Arbeitsschlangen-Zustand-Controller-Objekt
erhält
dann den aktuellen Zustand des Faden-Pools 14, indem wie
oben beschrieben der Erhalte-Aktuellen-Arbeitsschlangen-Zustand
verwendet wird. Der Zeiger für
das Arbeitsschlangen-Unterbrochen-Zustand-Objekt wird dann verwendet,
um das Wiederaufnahme-Schlange-Verfahren
im Objekt aufzurufen. Das Arbeitsschlangen-Unterbrochen-Zustand-Objekt ruft zurück zum Schalte-Zustände-Verfahren des Arbeitsschlangen-Zustand-Controller-Objekts
mit dem ARBEITS WARTESCHLANGEN GESTOPPT-Parameter, das die Fadensynchronisierung mit
dem Warteverfahren aufruft, den aktuellen Zustand verlässt und
auf den neuen Zustand verweist. Der Zeiger wird auf das Arbeitsschlangen-Laufend-Zustand-Objekt
geschaltet. Das Verlasse-Zustand-Verfahren ruft das Setze-Verfahren
des Faden-Unterbrecher-Objekts auf, um die Zustand-Übergänge in eine
serielle Form zu bringen, damit verhindert wird, dass die Fäden untereinander
die Zustände ändern. Der
gesetzte Aufruf wird die Synchronisierung derart erhöhen, dass
der Faden unterbrochen wird, wenn irgendein anderer Faden bereits
als gesetzt aufge rufen ist.
-
Das Schalte-Zustand-Verfahren ruft
dann das Enter-Zustand-Verfahren
des Arbeitsschlangen-Laufend-Zustand-Objekts auf. Die Steuerung wird
daraufhin zum Arbeitsschlangen-Zustand-Controller-Objekt zurückgeführt, das
die Fadensynchronisierung auslöst
und die Steuerung zum ausführenden
Programm zurückgibt.
-
8 ist
ein Objekt-Interaktionsprogramm, das den Übergang des Faden-Pools von
einem unterbrochenen auf einen gestoppten Zustand darstellt. Das
Verfahren ist ähnlich
dem Übergang
vom laufenden Zustand auf dem gestoppten Zustand, mit der Ausnahme,
dass das Verlasse-Zustand-Verfahren des Arbeitsschlangen-Unterbreche-Zustand-Objekts das
Setze-Verfahren des Faden-Unterbreche-Vorrichtung-Objekts
aufruft.
-
9 ist
ein Objekt-Interaktionsprogramm, das den Übergang des Faden-Pools von
einem gestoppten auf einen unterbrochenen Zustand darstellt. Der
Faden-Pool-Manager 18 ruft das Start-Schlange-Verfahren
des Arbeitsschlangen-Objekts auf, um die Zustandsänderung
von gestoppt auf unterbrochen zu starten, die durch zum Start-Schlange-Verfahren
des Arbeitsschlangen-Zustand-Controller-Objekts
aufruft.
-
Das Arbeitsschlangen-Zustand-Controller-Objekt
erhält
dann mittels Verwendung des Erhalte-Aktuellen-Arbeitsschlangen-Zustands
den aktuellen Zustand des Faden-Pools 14. Der Zeiger für das Arbeitsschlangen-Gestoppt-Zustand-Objekt
wird dann verwendet, um das Start-Schlange-Verfahren im Objekt aufzurufen.
Das Arbeitsschlangen-Gestoppt-Zustand-Objekt ruft zurück zum Schalte-Zustände-Verfahren
des Arbeitsschlangen-Zustand-Controller-Objekts mit dem ARBEITS_WARTESCHLANGEN_UNTERBROCHEN-Parameter,
wobei die Fadensynchronisierung mit dem Warteverfahren aufgerufen
wird.
-
Das Verlasse-Zustand-Verfahren ruft
dann das Arbeitsschlangen-Gestoppt-Zustand-Objekts auf, das zurück zum Start-Arbeitsfäden-Verfahren des
Arbeitsschlangen-Zustand-Controller-Objekts ruft. Das Start-Arbeitsfäden-Verfahren
wartet zunächst
darauf, dass irgendwelche laufenden Fäden ausgeführt werden (und aus dem Faden-Pool
gelöscht
werden) und ruft dann das Start-Fäden-Verfahren des Arbeitsschlangen-Faden-Pool-Objekts auf,
um die neuen Fäden
im Faden-Pool 14 zu starten. Nachdem die Fäden gestartet
sind, wird die Steuerung zum Arbeitsschlangen-Zustand-Controller-Objekt
zurückgegeben,
und die Verarbeitung fährt wie
oben in 5 beschrieben
fort.
-
10 ist
ein Objekt-Interaktionsdiagramm, das die Ausführung eines Fadens darstellt,
wenn sich der Faden-Pool in einem unterbrochenen Zustand befindet.
Die Fadenausführung
wird mit dem Betriebs-Hauptverfahren des Arbeitsschlangen-Zustand-Controller-Objekts
gestartet. Der Faden erhält zuerst
den aktuellen Zustand des Faden-Pools, wie oben beschrieben, und
ruft dann das Ausreihungs-Arbeitsverfahren des Arbeitsschlangen-Unterbrochen-Zustand-Objekts
auf.
-
Das Ausreihungs-Arbeitsverfahren
senkt als erstes der Zählwert
der belegten Fäden.
Da für
den Faden noch keine Arbeit herausgenommen wurde, ist der Faden
nicht besetzt. Dann wird das Warteverfahren des Faden-Unterbrecher-Objekts
aufgerufen, um darauf zu warten, signalisiert zu werden. Wenn die
Steuerung zum Arbeitsschlangen-Unterbrochen-Zustand-Objekt zurückgeführt wird,
wird der Zählwert
der besetzten Fäden
inkrementiert, und ein Kein-Betrieb wird als Arbeit für den Faden
zurückgeführt. Das
Arbeitsschlangen-Zustand-Controller-Objekt ruft dann das Betrieb-Hauptverfahren
des Kein-Betrieb-Objekts auf. Das Kein-Betrieb-Objekt ist ein Fadenbetrieb.
Der Faden führt
den Kein-Betrieb-Fadenbetrieb
aus und wartet dann auf den nächsten
verfügbaren
Betrieb. Unter einem normalen Betrieb wird die NOP-Betriebsausführung ausgeführt und
der Faden wird realisieren, dass sich der Zustand geändert hat.
Der Grund für
den NOP liegt darin, irgendwelche unterbrochenen Fäden aufzuwecken,
so dass sie realisieren können,
dass sich der Zustand geändert
hat.
-
11 ist
ein Objekt-Interaktionsdiagramm, das die Ausführung eines Fadens darstellt,
wenn sich der Faden-Pool in einem laufenden Zustand befindet. Die
Fadenausführung
wird mit dem Betriebs-Hauptverfahren des Arbeitsschlangen-Zustand-Controller-Objekts gestartet.
Der Faden erhält
zuerst den aktuellen Zustand des Faden-Pools, wie oben beschrieben,
und ruft dann das Ausreihungs-Arbeitsverfahren des Arbeitsschlangen-Laufend-Zustand-Objekts auf.
-
Das Ausreihungs-Arbeitsverfahren
senkt den Zählwert
der besetzten Fäden
und ruft das Abwickle-Ausreihungs-Arbeitsverfahren des Schlangenzustand-Controller-Objekts
auf, das das Ausreihungs-Arbeitsverfahren des Arbeitsschlangen-Implementierung-Objekts
aufruft. Das Arbeitsschlangen-Implementierung-Objekt erhält einen
Fadenbetrieb von der Arbeitsschlange 12 (falls einer verfügbar ist),
senkt die Tiefe der Arbeitsschlange und wirft den Fadenbetrieb an
das Arbeitsschlangen-Zustand-Controller-Objekt heraus und gibt es daran zurück. Die
Steuerung wird dann zum Arbeitsschlangen-Laufend-Zustand-Objekt
und danach zum Arbeitsschlangen-Zustand-Controller-Objekt zurückgeführt. Das
Betrieb-Hauptverfahren des Betriebsobjekts wird aufgerufen, um den
Fadenbetrieb auszuführen.
Das Betriebsobjekt wird aus einer vom Benutzer bestimmten Klasse
instantiiert, die eine Fadenbetrieb-Klasse darstellt.
-
Wenn der Faden die Ausführung des
Fadenbetriebobjekts durchgeführt
hat, kehrt der Faden zurück,
um den Zustand des Faden-Pools zu erhalten und einen anderen Fadenbetrieb
aus der Schlange zu nehmen.
-
12 ist
ein Objekt-Interaktionsdiagramm, das die Ausführung eines Fadens darstellt,
wenn sich der Faden-Pool in einem gestoppten Zustand befindet und
die Arbeitsschlange nicht leer ist. Die Fadenausführung wird
mit dem Betriebs-Hauptverfahren des Arbeitsschlangen-Zustand-Controller-Objekts gestartet.
Der Faden erhält
zuerst den aktuellen Zustand des Faden-Pools, wie oben beschrieben, und ruft
dann das Ausreihungs-Arbeitsverfahren
des Arbeitsschlangen-gestoppt-Zustand-Objekts auf.
-
Das Ausreihungs-Arbeitsverfahren
ruft das Abwickle-Ausreihungs-Arbeitsverfahren des Arbeitsschlangen-Zustand-Controller-Objekts auf, das
das Ausreihungs-Arbeitsverfahren des Arbeitsschlangen-Implementierung-Objekts
aufruft. Das Arbeitsschlangen-Implementierung-Objekt
erhält
einen Fadenbetrieb von der Arbeitsschlange 12 (vorausgesetzt,
dass einer verfügbar
ist), senkt die Tiefe der Arbeitsschlange und wirft den Fadenbetrieb
heraus und gibt ihn an das Arbeitsschlangen-Zustand-Controller-Objekt zurück. Die
Steuerung wird dann, zum Arbeitsschlangen- Gestoppt-Zustand-Objekt rückgeführt. Wenn
der vom Arbeitsschlangen-Implementierung-Objekt rückgeführte Fadenbetrieb
gültig
ist, wird ein Kein-Betrieb an das Arbeitsschlangen-Zustand-Controller-Objekt
zurückgeführt.
-
Das Betrieb-Hauptverfahren des Betriebsobjekts
wird aufgerufen, um den Kein-Betrieb-Fadenbetrieb auszuführen. Wenn
der Faden den Kein-Betrieb-Fadenbetrieb ausgeführt hat, kehrt der Faden zurück, um den
Zustand des Faden-Pools zu erhalten und einen weiteren Fadenbetrieb
aus der Schlange zu nehmen.
-
13 ist
ein Objekt-Interaktionsdiagramm, das die Ausführung eines Fadens darstellt,
wenn sich der Faden-Pool in einem gestoppten Zustand befindet und
die Arbeitsschlange leer ist. Die Objekt-Interaktion für eine leere
Arbeitsschlange 12, wenn sich der Faden-Pool 14 in
einem gestoppten Zustand befindet, ähnelt der Objektinteraktion,
wenn die Arbeitsschlange nicht leer ist. Jedoch liegt der Unterschied darin,
dass das Arbeitsschlangen-Implementierung-Objekt die NULL zum Arbeitsschlangen-Zustand-Controller-Objekt
zurückführt, das
die Senkung des Besetzt-Faden-Zählwerts
bewirkt, und der Faden wird zerstört.
-
Entsprechend stellt die vorliegende
Erfindung unter weiteren Aspekten ein Verfahren zum Verwalten eines
Faden-Pools und eine von den Fäden
durchzuführende
Arbeitsschlange bereit. Weitere Aspekte und Ausführungsformen der vorliegenden Erfindung
werden den Fachleuten auf dem Gebiet in Zusammenhang mit der Betrachtung
der Beschreibung und der praktischen Anwendung der hierin offenbarten
Erfindung ersichtlich. Es ist beabsichtigt, die Beschreibung und
die dargestellten Ausführungsformen
lediglich als Beispiele zu betrachten, wobei der wahre Schutzumfang
der Erfindung durch die folgenden Ansprüche angezeigt wird.