was ist zwischen der festen Rate und der festen Verzögerung im Zeitplan Frühling?

8

Ich implementiere geplante Aufgaben mit Hilfe von Spring und ich sehe 2 Typ Config Zeit, dass geplant wieder von spät funktioniert. Was unterscheidet zwischen 2 Typ diese Konfig.

%Vor%     
Adam 09.08.2016, 05:09
quelle

5 Antworten

12
  • fixedRate: Lässt Spring die Aufgabe in regelmäßigen Abständen ausführen, auch wenn der Der letzte Aufruf wird möglicherweise noch ausgeführt.
  • fixedDelay: steuert spezifisch die nächste Ausführungszeit, wenn der letzte Ausführung endet.

Im Code:

%Vor%     
kuhajeyan 09.08.2016, 06:13
quelle
4

fixedRate: Es wird verwendet, um die Job-Methode alle n Millisekunden auszuführen. Es ist nicht wichtig, ob der Job seine vorherige Aufgabe bereits beendet hat.

fixedDelay: Es wird verwendet, um die Job-Methode sequenziell mit den angegebenen n Millisekunden Wartezeit zwischen den Aufgaben auszuführen.

Wann sollte "fixedRate" verwendet werden: FixedRate ist geeignet, wenn nicht erwartet wird, dass die Größe des Arbeitsspeichers und des Threadpools überschritten wird. Wenn die eingehenden Aufgaben nicht schnell beendet werden, kann dies zu einer "Nicht genügend Speicher-Ausnahme"

führen

Wann sollte "fixedDelay" verwendet werden: Wenn jede laufende Aufgabe füreinander relevant ist und sie warten müssen, bevor die vorherige abgeschlossen ist, ist fixedRate geeignet. Wenn die FixedDelay-Zeit sorgfältig eingestellt ist, wird den laufenden Threads genügend Zeit gelassen, ihre Jobs zu beenden, bevor die neue Task gestartet wird.

    
ahmetcetin 14.06.2017 11:16
quelle
3

"fixedRate": wartet auf X millis vom Beginn der vorherigen Ausführung an, bevor die nächste Ausführung beginnt. Wenn die aktuelle Ausführung das Intervall 'fixedRate' überschreitet, wird die nächste Ausführung in die Warteschlange gestellt, aber nur die nächste. Es wird keine Serie von Ausführungen in der Warteschlange erstellt.

%Vor%

Ausgabe:

  

Gestartet: 1
  Abschluss: 1 // nach 4 Sekunden
  Started: 2 // sofort ohne Warten auf 1 Sekunde, wie in der festen Rate angegeben   Abschluss: 2 // nach 4 Sekunden
  und so weiter

"fixedDelay": wartet auf X millis vom Ende der vorherigen Ausführung, bevor die nächste Ausführung gestartet wird. Unabhängig davon, wie viel Zeit die aktuelle Ausführung in Anspruch nimmt, wird die nächste Ausführung nach dem Hinzufügen des Intervalls "fixedDelay" zur Endzeit der aktuellen Ausführung gestartet. Die nächste Ausführung wird nicht in die Warteschlange gestellt.

%Vor%

Ausgabe:

  

Gestartet: 1
  Beendet: 1 // nach 4 Sekunden   2 // wartet 1 Sekunde wie in fixedDelay angegeben   Abschluss: 2 // nach 4 Sekunden   Gestartet: 3 // nach 1 Sekunde
  und so weiter

    
nikhil7610 03.06.2017 04:29
quelle
0

Feste Verzögerung : Bestimmt die nächste Ausführungszeit, wenn die letzte Ausführung beendet ist.

Feste Rate : veranlasst, dass Spring die Aufgabe in regelmäßigen Intervallen ausführt, auch wenn der letzte Aufruf möglicherweise noch läuft.

    
Jinen Kothari 09.08.2016 06:25
quelle
0

Eine Sache, die geklärt werden sollte, ist, dass fixedRate nicht bedeutet, dass Ausführungen mit einem bestimmten Zeitintervall beginnen.

Wenn eine Ausführung zu viel Zeit kostet (mehr als die feste Rate), wird die nächste Ausführung erst NACH beginnen, wenn die vorherige Ausführung abgeschlossen ist, es sei denn, @Async und @EnableAsync werden bereitgestellt. Die folgenden Quellcodes, die Teil der Spring ThreadPoolTaskScheduler Implementierung sind, erklären warum:

%Vor%

Sie können sehen, dass erst nach Abschluss der vorherigen Aufgabe ( super.run() ) die nächste Aufgabe geplant ist ( schedule() ). Mit @Async und @EnableAsync ist super.run() eine asynchrone Funktion, die sofort zurückkehrt, so dass die nächste Aufgabe nicht darauf warten muss, dass die vorherige tatsächlich beendet wird.

    
fifman 04.04.2018 08:37
quelle

Tags und Links