Keine Steuerung der Nebenläufigkeit
Die folgende Beispielregelsammlung besteht aus zwei Schleifen. Jede Schleife verwendet die Aktion In Datei schreiben, um mehrere Zeilen Text in eine Textdatei zu schreiben – mit einer kleinen Verzögerung zwischen dem Schreiben der einzelnen Zeilen.
Wenn eine einzelne Instanz ausgeführt wird, sieht die Ausgabe wie folgt aus:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Starting Loop 1 *****************************
Loop 1 - Iteration: 1
Loop 1 - Iteration: 2
Loop 1 - Iteration: 3 - End of Loop 1 *******************************
- Starting Loop 1 *****************************
-
- Start of Loop 2 ###############################
Loop 2 - iteration: 1
Loop 2 - iteration: 2
Loop 2 - iteration: 3 - End of Loop 2 #################################
Wenn jedoch mehrere Instanzen in schneller Abfolge ausgeführt werden, sieht die Ausgabe wie folgt aus:-
- Starting Loop 1 *************************
Loop 1 - Iteration: 1 - Starting Loop 1 *************************
Loop 1 - Iteration: 1 - Starting Loop 1 *************************
Loop 1 - Iteration: 1
Loop 1 - Iteration: 2
Loop 1 - Iteration: 2
Loop 1 - Iteration: 2
Loop 1 - Iteration: 3
Loop 1 - Iteration: 3
Loop 1 - Iteration: 3 - End of Loop 1 ***************************
- End of Loop 1 ***************************
- End of Loop 1 ***************************
- Starting Loop 1 *************************
-
- Start of Loop 2 ###########################
Loop 2 - iteration: 1 - Start of Loop 2 ###########################
Loop 2 - iteration: 1 - Start of Loop 2 ###########################
Loop 2 - iteration: 1
Loop 2 - iteration: 2
Loop 2 - iteration: 2
Loop 2 - iteration: 2
Loop 2 - iteration: 3
Loop 2 - iteration: 3
Loop 2 - iteration: 3 - End of Loop 2 #############################
- End of Loop 2 #############################
- End of Loop 2 #############################
Da jede Instanz zur gleichen Zeit in die Datei schreibt, überlappt sich die Ausgabe der Instanzen.
Nur Nebenläufigkeit begrenzen
Im folgenden Beispiel wird nur die Aktion Nebenläufigkeit begrenzen verwendet. Es ist so konfiguriert, dass nur eine Instanz ausgeführt wird. Der Begrenzer trägt den Namen LimitConcurrencyOnlyExample.
Von dem Zeitpunkt an, an dem die Aktion Nebenläufigkeit begrenzen ausgeführt wird, bis die Regelkette abgeschlossen ist, werden keine anderen Instanzen der Regelkette ausgeführt. Sie werden stattdessen bei der Aktion Nebenläufigkeit begrenzen auf eine Warteschlange gesetzt, bis die derzeit ausgeführten Instanzen abgeschlossen sind. Wenn sich mehrere Artikelketteninstanzen bei der Aktion Nebenläufigkeit begrenzen in der Warteschlange befinden, werden sie in der gleichen Reihenfolge freigegeben, in der sie die Warteschlange betreten haben:
Wenn die oben genannte Regelsammlung in einem Job aktiviert ist und in schneller Folge drei Mal ausgelöst wird, wird eine Textdatei mit folgender Ausgabe erzeugt:-
- Starting Loop 1 *************************
Loop 1 - Iteration: 1
Loop 1 - Iteration: 2
Loop 1 - Iteration: 3 - End of Loop 1 ***************************
- Starting Loop 1 *************************
-
-
-
- Start Loop 2 ###############################
Loop 2 - repetition: 1
Loop 2 - repetition: 2
Loop 2 - repetition: 3 - End of Loop 2 ###############################
-
-
-
- Starting Loop 1 *************************
Loop 1 - Iteration: 1
Loop 1 - Iteration: 2
Loop 1 - Iteration: 3 - End of Loop 1 ***************************
- Starting Loop 1 *************************
-
-
- Start Loop 2 ##############################
Loop 2 - repetition: 1
Loop 2 - repetition: 2
Loop 2 - repetition: 3 - End of Loop 2 ##############################
-
-
- Starting Loop 1 *************************
Loop 1 - Iteration: 1
Loop 1 - Iteration: 2
Loop 1 - Iteration: 3 - End of Loop 1 ***************************
- Starting Loop 1 *************************
-
-
-
- Start Loop 2 ###############################
Loop 2 - repetition: 1
Loop 2 - repetition: 2
Loop 2 - repetition: 3 - End of Loop 2 ###############################
Beachten Sie, dass nur jeweils eine Instanz der Kette zur gleichen Zeit in die Datei schreiben konnte. Jede Instanz hat beide Schleifen abgeschlossen, bevor die nächste Instanz weiter machen konnte. Dies liegt daran, dass jede Instanz, die den Begrenzer bei der Aktion Nebenläufigkeit festlegen erhält, angehalten wird, bis beide Schleifen abgeschlossen wurden. Am Ende der zweiten Schleife wird der Begrenzer automatisch freigegeben, weil das Ende der Regelkette erreicht wurde. Die nächste Instanz, die bei der Aktion Nebenläufigkeit begrenzen wartet, ist dann in der Lage, den Begrenzer zu erhalten und fortzufahren.
„Nebenläufigkeit begrenzen" und „Nebenläufigkeit freigeben"
Im folgenden Beispiel werden die Aktionen Nebenläufigkeit begrenzen und Nebenläufigkeit freigeben beide verwendet. Die Regionen der Regelkette, die durch die Aktionen Nebenläufigkeit begrenzen und Nebenläufigkeit freigeben begrenzt werden, werden auf eine einzige ausgeführte Instanz begrenzt. Alle anderen Instanzen werden bei der Aktion Nebenläufigkeit begrenzen in die Warteschlange gesetzt, bis die derzeit ausgeführten Instanzen die Aktion Nebenläufigkeit freigeben erreicht haben. Die nächste wartende Instanz beginnt dann mit dem Ausführen der Aktionen innerhalb der Region Nebenläufigkeit begrenzen zu Nebenläufigkeit freigeben.
Wenn die oben genannte Regelsammlung in einem Job aktiviert ist und in schneller Folge drei Mal ausgelöst wird, wird eine Textdatei mit folgender Ausgabe erzeugt:-
-
-
- Starting Loop 1 *************************
Loop 1 - Iteration: 1
Loop 1 - Iteration: 2
Loop 1 - Iteration: 3 - End of Loop 1 ***************************
- Starting Loop 1 *************************
Loop 1 - Iteration: 1
Loop 1 - Iteration: 2
Loop 1 - Iteration: 3 - End of Loop 1 ***************************
- Starting Loop 1 *************************
Loop 1 - Iteration: 1
Loop 1 - Iteration: 2
Loop 1 - Iteration: 3 - End of Loop 1 ***************************
- Starting Loop 1 *************************
-
-
-
- Start Loop 2 ###############################
Loop 2 - repetition: 1
Loop 2 - repetition: 2
Loop 2 - repetition: 3 - End of Loop 2 ###############################
- Start Loop 2 ##############################
Loop 2 - repetition: 1
Loop 2 - repetition: 2
Loop 2 - repetition: 3 - End of Loop 2 ##############################
- Start Loop 2 ##############################
- Start Loop 2 ###############################
Loop 2 - repetition: 1
Loop 2 - repetition: 2
Loop 2 - repetition: 3 - End of Loop 2 ###############################
Beachten Sie, dass sich die Ausgabe in der Schleife wie im ersten Beispiel überlappt. Sie unterscheidet sich aber vom vorherigen Beispiel, weil jeder Instanz erlaubt wurde, die erste Schleife abzuschließen, bevor der ersten Instanz erlaubt wurde, die zweite Schleife zu beginnen. Das liegt daran, weil die Instanz zwischen den beiden Schleifen den Begrenzer freigibt und neu erlangt, was dazu führt, dass sie ans Ende der Warteschlange gestellt wird und wieder darauf warten muss, den Begrenzer zu erhalten.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-