Activity-Lang: work out activation-dispatch-notification sequence

...attempt to get this intricate state machine sorted out

Notification turned out quite tricky, since it may emanate
from a concurrently executed phase and we try to avoid having
to protect the gate directly with a lock; rather we re-dispatch
the notification through the queue, which indirectly also ensures
that the worker de-queuing the NOTIFY-Activity operates in
management mode (single threaded, holding the GroomingToken)
This commit is contained in:
Fischlurch 2023-08-21 17:32:52 +02:00
parent b7641115fb
commit 108a5e7ca5
3 changed files with 243 additions and 30 deletions

View file

@ -137,6 +137,11 @@ namespace gear {
, Time now
, void* executionCtx) =0;
/** Callback when dispatching a NOTIFY-Activity to \a thisHook */
virtual Proc notify ( Activity& thisHook
, Time now
, void* executionCtx) =0;
virtual std::string
diagnostic() const
{
@ -366,6 +371,12 @@ namespace gear {
template<class EXE>
activity::Proc activate (Time now, EXE& executionCtx);
template<class EXE>
activity::Proc dispatch (Time now, EXE& executionCtx);
template<class EXE>
activity::Proc notify (Time now, EXE& executionCtx);
private:
void
@ -418,6 +429,7 @@ namespace gear {
return activity::PASS;
}
template<class EXE>
activity::Proc
signalStart (Time now, EXE& executionCtx)
@ -438,8 +450,16 @@ namespace gear {
activity::Proc
dispatchNotify (Time now, EXE& executionCtx)
{
UNIMPLEMENTED ("double-dispatch a notification trigger");
return executionCtx.post (now, *next, executionCtx);
return executionCtx.post (now, *this, executionCtx);
}
template<class EXE>
activity::Proc
notifyTarget (Time now, EXE& executionCtx)
{
REQUIRE (NOTIFY == verb_);
REQUIRE (data_.notification.target);
return data_.notification.target->notify (now, executionCtx);
}
template<class EXE>
@ -447,14 +467,36 @@ namespace gear {
checkGate (Time now, EXE& executionCtx)
{
REQUIRE (GATE == verb_);
if (now > data_.condition.dead) // beyond deadline
if (data_.condition.isDead(now)) // beyond deadline
return activity::SKIP;
if (0 < data_.condition.rest) // prerequisite count not(yet) fulfilled -> spin (=re-invoke later)
return executionCtx.post (executionCtx.spin(now), *this, executionCtx);
if (data_.condition.isHold()) // prerequisite count not(yet) fulfilled -> spin (=re-invoke later)
return dispatchSelfDelayed (now, executionCtx);
else
return activity::PASS;
}
template<class EXE>
activity::Proc
receiveGateNotification (Time now, EXE& executionCtx)
{
REQUIRE (GATE == verb_);
if (data_.condition.rest > 0)
--data_.condition.rest;
// maybe the Gate has been opened by this notification?
if (data_.condition.isFree(now)) // yes => activate gated chain
return postChain (now, executionCtx);
else
return activity::PASS;
}
template<class EXE>
activity::Proc
dispatchSelfDelayed (Time now, EXE& executionCtx)
{
REQUIRE (next);
return executionCtx.post (executionCtx.spin(now), *this, executionCtx);
}
template<class EXE>
activity::Proc
postChain (Time now, EXE& executionCtx)
@ -471,6 +513,14 @@ namespace gear {
: activity::PASS;
}
template<class EXE>
activity::Proc
notifyHook (Time now, EXE& executionCtx)
{
return data_.callback.hook? data_.callback.hook->notify (*this, now, &executionCtx)
: activity::PASS;
}
template<class EXE>
activity::Proc
doTick (Time now, EXE& executionCtx)
@ -512,6 +562,64 @@ namespace gear {
}
}
/**
* Entrance point for an activation, which has been dispatched indirectly
* through the dispatch and/or priority queue; typically this is achieved
* by invoking the `post`-λ on the \a executionCtx, or by _activating_
* a `POST`-Activity. Control flow passing here has acquired the `GroomingToken`
* and can thus assume single threaded execution until `WORKSTART`.
* @note special twist for the `NOTIFY`-Activity: it is not _activated_
* itself, rather the #notify operation is invoked on its target(`next`);
* this is necessary since a notification passes control-flow outside
* the regular linear `next`-chain; when a `NOTIFY` is _activated,_
* it will `post()` itself to acquire the `GroomingToken` and then
* invoke this dispatch() function to pass the notification
*/
template<class EXE>
activity::Proc
Activity::dispatch (Time now, EXE& executionCtx)
{
activity::_verify_usable_as_ExecutionContext<EXE>();
switch (verb_) {
case NOTIFY:
return notifyTarget (now, executionCtx);
case POST:
case FEED: // signal just to proceed with next...
return activity::PASS;
default:
return activate (now, executionCtx);
}
}
/**
* Special operation to receive a message or trigger from some other Activity.
* Notably this is used to implement _gating_ to wait for prerequisites; when
* a notification is passed to a `GATE`-Activity, the embedded counter is
* decremented; after all prerequisites are „checked off“ this way, the
* Activity-chain behind the Gate is activated.
*/
template<class EXE>
activity::Proc
Activity::notify (Time now, EXE& executionCtx)
{
activity::_verify_usable_as_ExecutionContext<EXE>();
switch (verb_) {
case GATE:
return receiveGateNotification (now, executionCtx);
case HOOK:
return notifyHook (now, executionCtx);
case POST:
case FEED:
return postChain (now, executionCtx);
default:
return dispatchSelfDelayed (now, executionCtx);
} // Fallback: self-re-dispatch for async execution
}
}} // namespace vault::gear

View file

@ -381,6 +381,26 @@ namespace test {
}
}
activity::Proc
notify ( Activity& thisHook
, Time now
, void* executionCtx) override
{
REQUIRE (Activity::HOOK == thisHook.verb_);
if (data_.callback.arg == 0)
{// no adapted target; just record this notification
log_(util::toString(now) + " --notify-↯• ");
return activity::PASS;
}
else
{// forward notification-dispatch to the adapted target Activity
Activity& target = *reinterpret_cast<Activity*> (data_.callback.arg);
auto ctx = *static_cast<FakeExecutionCtx*> (executionCtx);
log_(util::toString(now) + " --notify-↯> " + util::toString (target));
return target.activate (now, ctx);/////////////////////////////////////////////////////OOO
}
}
std::string
diagnostic() const override
{

View file

@ -78469,7 +78469,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1690068830605" ID="ID_330404913" MODIFIED="1690068833053" TEXT="Invocation">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1690068830605" ID="ID_330404913" MODIFIED="1692567498691" TEXT="Activation">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1690068838900" ID="ID_1597056190" MODIFIED="1690068897095" TEXT="Argumente">
<icon BUILTIN="info"/>
@ -78532,13 +78532,19 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1690069222750" ID="ID_817512371" MODIFIED="1690495286268" TEXT="&#x3bb;-post">
<linktarget COLOR="#a9b4c1" DESTINATION="ID_817512371" ENDARROW="Default" ENDINCLINATION="-55;19;" ID="Arrow_ID_1228234954" SOURCE="ID_1000629107" STARTARROW="None" STARTINCLINATION="-170;11;"/>
<linktarget COLOR="#8897a9" DESTINATION="ID_817512371" ENDARROW="Default" ENDINCLINATION="-175;61;" ID="Arrow_ID_847368059" SOURCE="ID_681493814" STARTARROW="None" STARTINCLINATION="-262;0;"/>
<node CREATED="1692569081906" ID="ID_914571375" MODIFIED="1692569093021" TEXT="versucht das Grooming-Token zu erlangen"/>
<node CREATED="1692569093561" ID="ID_1575390199" MODIFIED="1692569104579" TEXT="sonst: Dispatch &#xfc;ber die Queue"/>
<node CREATED="1692569105461" ID="ID_1960608539" MODIFIED="1692569164192" TEXT="schlie&#xdf;lich Dispatch auf der konkreten Activity">
<arrowlink COLOR="#46429b" DESTINATION="ID_1729670913" ENDARROW="Default" ENDINCLINATION="100;-277;" ID="Arrow_ID_1325928186" STARTARROW="None" STARTINCLINATION="-484;32;"/>
</node>
</node>
</node>
<node CREATED="1688998737324" ID="ID_1768827754" MODIFIED="1688998829651" TEXT="GATE">
<node CREATED="1690069237564" ID="ID_1663637650" MODIFIED="1690069243595" TEXT="pr&#xfc;ft die Bedingungen"/>
<node CREATED="1690069251010" ID="ID_449595126" MODIFIED="1690069692342" TEXT="bei Erfolg wird die Aktivierung weitergegeben">
<linktarget COLOR="#a9b4c1" DESTINATION="ID_449595126" ENDARROW="Default" ENDINCLINATION="317;20;" ID="Arrow_ID_288430732" SOURCE="ID_1897470873" STARTARROW="None" STARTINCLINATION="232;-25;"/>
<linktarget COLOR="#a9b4c1" DESTINATION="ID_449595126" ENDARROW="Default" ENDINCLINATION="317;20;" ID="Arrow_ID_288430732" SOURCE="ID_1897470873" STARTARROW="None" STARTINCLINATION="233;-20;"/>
</node>
<node CREATED="1692544036224" ID="ID_1531555498" LINK="#ID_846298052" MODIFIED="1692544299830" TEXT="die Deadline selber ist bereits ausgeschlossen"/>
<node COLOR="#435e98" CREATED="1690069297302" ID="ID_33956976" MODIFIED="1690492032363" TEXT="sonst....">
<icon BUILTIN="help"/>
<node CREATED="1690069315708" ID="ID_1571780277" MODIFIED="1690069346741" TEXT="...soll sich das Gate &#xbb;selbst in die Zukunft schieben&#xab;"/>
@ -78612,13 +78618,17 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<arrowlink COLOR="#72647d" DESTINATION="ID_1420540747" ENDARROW="Default" ENDINCLINATION="17;-42;" ID="Arrow_ID_1383949980" STARTARROW="None" STARTINCLINATION="-175;7;"/>
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1690495433254" ID="ID_1805822057" MODIFIED="1690495483570" TEXT="umst&#xe4;ndehalber kann noch eine asynchrone &#xdc;bergabe (&#x3bb;) dazwischenliegen">
<node CREATED="1690495433254" ID="ID_1805822057" MODIFIED="1692569069328" TEXT="aus Konsistenz-Gr&#xfc;nden indirekter Dispatch (u.U asynchron)">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1690069846556" ID="ID_681493814" MODIFIED="1690495242907" TEXT="&#x3bb;-post">
<arrowlink COLOR="#8897a9" DESTINATION="ID_817512371" ENDARROW="Default" ENDINCLINATION="-175;61;" ID="Arrow_ID_847368059" STARTARROW="None" STARTINCLINATION="-262;0;"/>
</node>
</node>
<node CREATED="1690891900488" ID="ID_955220405" MODIFIED="1690891904780" TEXT="HOOK">
<node CREATED="1690891815995" ID="ID_642006957" MODIFIED="1690891938727" TEXT="als Erweiterungspunkt / f&#xfc;r Instrumentierung">
<node CREATED="1690891815995" ID="ID_642006957" MODIFIED="1692569548046" TEXT="als Erweiterungspunkt / f&#xfc;r Instrumentierung">
<arrowlink COLOR="#759db4" DESTINATION="ID_1359624247" ENDARROW="Default" ENDINCLINATION="446;-43;" ID="Arrow_ID_265182299" STARTARROW="None" STARTINCLINATION="1008;65;"/>
<linktarget COLOR="#8b8aa3" DESTINATION="ID_642006957" ENDARROW="Default" ENDINCLINATION="-141;9;" ID="Arrow_ID_1356089696" SOURCE="ID_797276026" STARTARROW="None" STARTINCLINATION="-234;-13;"/>
</node>
<node CREATED="1690892152761" ID="ID_1147906730" MODIFIED="1690892165928" TEXT="ruft den Erweiterungspunkt auf (virtual call)"/>
<node CREATED="1690892167303" ID="ID_439509474" MODIFIED="1690892177400" TEXT="&#xfc;bergibt ExecutionCtx + this"/>
@ -78628,28 +78638,52 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1690068951061" ID="ID_1729670913" MODIFIED="1690068954662" TEXT="Notification">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1690068951061" ID="ID_1729670913" MODIFIED="1692569150684" TEXT="Dispatch">
<linktarget COLOR="#46429b" DESTINATION="ID_1729670913" ENDARROW="Default" ENDINCLINATION="100;-277;" ID="Arrow_ID_1325928186" SOURCE="ID_1960608539" STARTARROW="None" STARTINCLINATION="-484;32;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1692567620559" ID="ID_560161359" MODIFIED="1692567640105" TEXT="Notification indirekt &#xfc;ber den Scheduler">
<icon BUILTIN="info"/>
<node CREATED="1692567646787" ID="ID_1679080727" MODIFIED="1692567660965" TEXT="je nach Grooming-Token direkt(synchron) oder asynchron"/>
<node CREATED="1692567661650" ID="ID_319374048" MODIFIED="1692567674700" TEXT="falls asynchron dann durch die Dispatch-Queue"/>
<node CREATED="1692567692725" ID="ID_833972320" MODIFIED="1692567710662" TEXT="falls Post(Zeitfenster) dann auch durch die Priority-Queue"/>
</node>
<node CREATED="1690068955715" ID="ID_995732211" MODIFIED="1690068991190" TEXT="kann gegebenenfalls zu einer Invokation f&#xfc;hren">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1692627423725" ID="ID_403843310" MODIFIED="1692627432102" TEXT="abh&#xe4;ngig vom Zieltyp"/>
<node CREATED="1692627432915" ID="ID_473632250" MODIFIED="1692627443790" TEXT="und ggfs GATE-check"/>
<node CREATED="1692627449218" ID="ID_750903644" MODIFIED="1692627599339" TEXT="Problem der Sprung-Weitergabe">
<arrowlink COLOR="#9a7574" DESTINATION="ID_1757918789" ENDARROW="Default" ENDINCLINATION="197;-7;" ID="Arrow_ID_1929671741" STARTARROW="None" STARTINCLINATION="116;9;"/>
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node CREATED="1690069599277" ID="ID_1420540747" MODIFIED="1690495396485" TEXT="double-dispatch">
<linktarget COLOR="#72647d" DESTINATION="ID_1420540747" ENDARROW="Default" ENDINCLINATION="17;-42;" ID="Arrow_ID_1383949980" SOURCE="ID_1735708551" STARTARROW="None" STARTINCLINATION="-175;7;"/>
<icon BUILTIN="idea"/>
<node CREATED="1690069609660" ID="ID_194969059" MODIFIED="1690069611647" TEXT="GATE">
<node CREATED="1690069609660" ID="ID_194969059" MODIFIED="1692569203630" TEXT="NOTIFY &#x27f6; GATE">
<node CREATED="1690069633998" ID="ID_6952365" MODIFIED="1690069639563" TEXT="count-down latch"/>
<node CREATED="1690069650471" ID="ID_1897470873" MODIFIED="1690069692342" TEXT="Invocation ohne else-Fall">
<arrowlink DESTINATION="ID_449595126" ENDARROW="Default" ENDINCLINATION="317;20;" ID="Arrow_ID_288430732" STARTARROW="None" STARTINCLINATION="232;-25;"/>
<node CREATED="1690069650471" ID="ID_1897470873" MODIFIED="1692568945143" TEXT="ggfs Activation ohne else-Fall">
<arrowlink DESTINATION="ID_449595126" ENDARROW="Default" ENDINCLINATION="317;20;" ID="Arrow_ID_288430732" STARTARROW="None" STARTINCLINATION="233;-20;"/>
</node>
</node>
<node CREATED="1692569485796" ID="ID_1923357251" MODIFIED="1692569492311" TEXT="NOTIFY &#x27f6; HOOK">
<node CREATED="1692569497066" ID="ID_797276026" MODIFIED="1692569567132" TEXT="ruft den 2.Erweiterungspunkt auf (virtual call)">
<arrowlink COLOR="#8b8aa3" DESTINATION="ID_642006957" ENDARROW="Default" ENDINCLINATION="-141;9;" ID="Arrow_ID_1356089696" STARTARROW="None" STARTINCLINATION="-234;-13;"/>
</node>
<node CREATED="1690892167303" ID="ID_393592267" MODIFIED="1690892177400" TEXT="&#xfc;bergibt ExecutionCtx + this"/>
</node>
<node CREATED="1692569286359" ID="ID_246311340" MODIFIED="1692569354921" TEXT="POST &#x27f6; &lt;*&gt;">
<node CREATED="1692569324714" ID="ID_259602812" MODIFIED="1692569349484" TEXT="Activation auf &lt;*&gt;"/>
</node>
<node COLOR="#3c2cd7" CREATED="1690492107763" ID="ID_1237570064" MODIFIED="1690492139563" TEXT="--more-to-come-here--">
<font NAME="Monospaced" SIZE="12"/>
</node>
<node CREATED="1690069612171" ID="ID_546472363" MODIFIED="1690069618238" TEXT="sonst: Invocation">
<node CREATED="1690069846556" ID="ID_681493814" MODIFIED="1690495242907" TEXT="&#x3bb;-post">
<arrowlink COLOR="#8897a9" DESTINATION="ID_817512371" ENDARROW="Default" ENDINCLINATION="-175;61;" ID="Arrow_ID_847368059" STARTARROW="None" STARTINCLINATION="-262;0;"/>
<node CREATED="1690069612171" ID="ID_546472363" MODIFIED="1692569272220" TEXT="sonst: Activation"/>
</node>
</node>
<node CREATED="1692627465184" ID="ID_1777234139" MODIFIED="1692627474498" TEXT="Ausf&#xfc;hrungs-Sequenz">
<node CREATED="1692627475398" ID="ID_635246138" MODIFIED="1692627523707" TEXT="normalerweise Weitergabe an die next-Activity "/>
<node CREATED="1692627524719" ID="ID_1757918789" MODIFIED="1692627590963" TEXT="bei Spr&#xfc;ngen und Verzweigungen wird daf&#xfc;r POST verwendet">
<linktarget COLOR="#9a7574" DESTINATION="ID_1757918789" ENDARROW="Default" ENDINCLINATION="197;-7;" ID="Arrow_ID_1929671741" SOURCE="ID_750903644" STARTARROW="None" STARTINCLINATION="116;9;"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1690069961163" HGAP="-57" ID="ID_1647246120" MODIFIED="1692491427946" TEXT="brauche Diagnose-Hilfsmittel" VSHIFT="4">
@ -79095,7 +79129,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1687914473677" ID="ID_1900995461" MODIFIED="1687914486927" TEXT="stellt seine Nachfollger in die Queue"/>
<node CREATED="1687913985529" ID="ID_1403905180" MODIFIED="1690736160581" TEXT="workStop">
<node CREATED="1687909447304" ID="ID_243187423" MODIFIED="1687914554079" TEXT="an TimingObservable">
<arrowlink COLOR="#a1195c" DESTINATION="ID_225279364" ENDARROW="Default" ENDINCLINATION="231;0;" ID="Arrow_ID_940532479" STARTARROW="None" STARTINCLINATION="71;9;"/>
<arrowlink COLOR="#a1195c" DESTINATION="ID_225279364" ENDARROW="Default" ENDINCLINATION="231;0;" ID="Arrow_ID_940532479" STARTARROW="None" STARTINCLINATION="189;26;"/>
</node>
</node>
<node CREATED="1687914113919" ID="ID_711237666" MODIFIED="1687914123035" TEXT="notification(s)">
@ -79104,22 +79138,40 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
<node CREATED="1687994762046" ID="ID_1088341634" MODIFIED="1687994767082" TEXT="Gate-Check">
<node CREATED="1692551986796" ID="ID_1825945396" MODIFIED="1692565840129" TEXT="Konsistenz durch synchrone Ausf&#xfc;hrung sichergestellt">
<linktarget COLOR="#a4345b" DESTINATION="ID_1825945396" ENDARROW="Default" ENDINCLINATION="196;9;" ID="Arrow_ID_784132365" SOURCE="ID_1681650444" STARTARROW="None" STARTINCLINATION="171;11;"/>
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1687994769427" ID="ID_490498751" MODIFIED="1688513655010" TEXT="pr&#xfc;ft countdown-Latch und Start-Zeit"/>
<node CREATED="1687994866264" ID="ID_1786817486" MODIFIED="1687994891144" TEXT="falls &gt; 0, re-schedule &#x27f6; future"/>
<node CREATED="1687995197271" ID="ID_1651228511" MODIFIED="1687995814074" TEXT="falls &#x21b7; Deadline &#x27f6; &#xd83d;&#xdc80;"/>
</node>
<node CREATED="1687996045519" ID="ID_230365460" MODIFIED="1687996181154" TEXT="notification">
<node CREATED="1687996191436" ID="ID_1681650444" MODIFIED="1688337488476" TEXT="Ausf&#xfc;hrung stets synchron">
<node CREATED="1687996045519" ID="ID_230365460" MODIFIED="1692565489730" TEXT="Notification">
<node CREATED="1692565457395" ID="ID_41855407" MODIFIED="1692565552446">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Unterscheidung in <b>Aktivierung</b>&#160;und <b>Dispatch</b>
</p>
</body>
</html></richcontent>
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1692565692906" ID="ID_1749560424" MODIFIED="1692565786682" TEXT="Aktiviertung &#x27f6; &#x3bb;-post &#x27f6; Dispatch &#x27f9; Ausf&#xfc;hrung"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1687996191436" ID="ID_1681650444" MODIFIED="1692565911759" TEXT="eigentliche Ausf&#xfc;hrung stets synchron">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
d.h. wird stehts von einem Worker ausgef&#252;hrt, der aktuell das GroomingToken h&#228;lt
d.h. wird stehts von einem Worker ausgef&#252;hrt, der aktuell das GroomingToken h&#228;lt &#10233; Race zwischen Inkrementieren und Gate-Check ausgeschlossen
</p>
</body>
</html></richcontent>
<arrowlink COLOR="#a4345b" DESTINATION="ID_1825945396" ENDARROW="Default" ENDINCLINATION="196;9;" ID="Arrow_ID_784132365" STARTARROW="None" STARTINCLINATION="171;11;"/>
<icon BUILTIN="yes"/>
</node>
<node CREATED="1687996497163" ID="ID_4769641" MODIFIED="1687996508267" TEXT="dekrementiert ein angeschlossenes Gate"/>
</node>
@ -79495,8 +79547,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1689199390484" ID="ID_1274424925" MODIFIED="1689200512352" TEXT="verifyActivity_Notify">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1689199390484" ID="ID_212018049" MODIFIED="1689201557502" TEXT="verifyActivity_Gate">
<linktarget COLOR="#f02f59" DESTINATION="ID_212018049" ENDARROW="Default" ENDINCLINATION="556;74;" ID="Arrow_ID_1693904148" SOURCE="ID_1220469732" STARTARROW="None" STARTINCLINATION="934;65;"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1689199390484" ID="ID_212018049" MODIFIED="1692544359039" TEXT="verifyActivity_Gate">
<linktarget COLOR="#2c8d69" DESTINATION="ID_212018049" ENDARROW="Default" ENDINCLINATION="556;74;" ID="Arrow_ID_1693904148" SOURCE="ID_1220469732" STARTARROW="None" STARTINCLINATION="472;34;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1689200547247" ID="ID_1506436785" MODIFIED="1689200552551" TEXT="termBuilder">
@ -80201,9 +80253,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node COLOR="#338800" CREATED="1689268798076" ID="ID_1723875762" MODIFIED="1689268819063" TEXT="vorl&#xe4;ufige Impl: einfach direkt die Deadline pr&#xfc;fen">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1689268827023" ID="ID_1220469732" MODIFIED="1689268891847" TEXT="vollst&#xe4;ndige GATE-Activity-Impl nutzen">
<arrowlink COLOR="#f02f59" DESTINATION="ID_212018049" ENDARROW="Default" ENDINCLINATION="556;74;" ID="Arrow_ID_1693904148" STARTARROW="None" STARTINCLINATION="934;65;"/>
<icon BUILTIN="hourglass"/>
<node COLOR="#338800" CREATED="1689268827023" ID="ID_1220469732" MODIFIED="1692544379876" TEXT="vollst&#xe4;ndige GATE-Activity-Impl nutzen">
<arrowlink COLOR="#2c8d69" DESTINATION="ID_212018049" ENDARROW="Default" ENDINCLINATION="556;74;" ID="Arrow_ID_1693904148" STARTARROW="None" STARTINCLINATION="472;34;"/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#338800" CREATED="1688513885200" ID="ID_47111804" MODIFIED="1689268918964" TEXT="auf der ersten nicht-obsoleten Epoche stehen bleiben">
@ -82370,7 +82422,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1687909353179" ID="ID_225279364" MODIFIED="1687914560990" TEXT="Aktualisierung">
<linktarget COLOR="#a1195c" DESTINATION="ID_225279364" ENDARROW="Default" ENDINCLINATION="279;0;" ID="Arrow_ID_802789276" SOURCE="ID_724099439" STARTARROW="None" STARTINCLINATION="376;36;"/>
<linktarget COLOR="#a1195c" DESTINATION="ID_225279364" ENDARROW="Default" ENDINCLINATION="231;0;" ID="Arrow_ID_940532479" SOURCE="ID_243187423" STARTARROW="None" STARTINCLINATION="71;9;"/>
<linktarget COLOR="#a1195c" DESTINATION="ID_225279364" ENDARROW="Default" ENDINCLINATION="231;0;" ID="Arrow_ID_940532479" SOURCE="ID_243187423" STARTARROW="None" STARTINCLINATION="189;26;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1687909361845" ID="ID_1177410843" MODIFIED="1687909381482" TEXT="aktueller Aggregatwert">
@ -82505,8 +82557,19 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</body>
</html></richcontent>
<node CREATED="1685398620907" ID="ID_454350455" MODIFIED="1685398749007" TEXT="&#xbb;Frame Deadline&#xab; &#x2261; absolute Deadline of delivery"/>
<node CREATED="1685398663573" ID="ID_135003232" MODIFIED="1685398735255" TEXT="&#xbb;Job Deadline&#xab; &#x2261; latest time the Job can be started"/>
<node CREATED="1685398713881" ID="ID_1091261870" MODIFIED="1685398773416" TEXT="&#xbb;Plan Deadline&#xab; &#x2261; latest time to dispatch the calculation plan"/>
<node CREATED="1685398663573" ID="ID_135003232" MODIFIED="1692542664588" TEXT="&#xbb;Job Deadline&#xab; &#x2261; Job must be started before this time point"/>
<node CREATED="1685398713881" ID="ID_1091261870" MODIFIED="1692542702567" TEXT="&#xbb;Plan Deadline&#xab; &#x2261; calculation plan must be dispatched prior"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1692542712329" ID="ID_846298052" MODIFIED="1692542791056">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
(Deadlines sind <i>danach </i>und wirken daher <i>exclusiv</i>)
</p>
</body>
</html></richcontent>
<icon BUILTIN="yes"/>
</node>
</node>
</node>
</node>
@ -83261,8 +83324,30 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1680563509728" ID="ID_1883500842" MODIFIED="1684869810400" TEXT="Scheduler">
<icon BUILTIN="stop"/>
<node CREATED="1688438164169" ID="ID_1339299906" MODIFIED="1688438167334" TEXT="Funktionalit&#xe4;t">
<node CREATED="1680563512563" ID="ID_960191744" MODIFIED="1680563516470" TEXT="Layer-2"/>
<node CREATED="1680563517255" ID="ID_1104189783" MODIFIED="1680563519264" TEXT="Layer-1"/>
<node CREATED="1680563512563" ID="ID_960191744" MODIFIED="1680563516470" TEXT="Layer-2">
<node CREATED="1692566362369" ID="ID_1816994355" MODIFIED="1692566368011" TEXT="Activity-Language">
<node CREATED="1692566369648" ID="ID_294018156" MODIFIED="1692566374835" TEXT="Builder"/>
<node CREATED="1692566375567" ID="ID_10896035" MODIFIED="1692566467830" TEXT="Execution-Context">
<arrowlink COLOR="#3e2835" DESTINATION="ID_1046477455" ENDARROW="Default" ENDINCLINATION="15;-31;" ID="Arrow_ID_1124233052" STARTARROW="None" STARTINCLINATION="-48;7;"/>
</node>
</node>
<node CREATED="1692566387373" ID="ID_1046477455" MODIFIED="1692566451735" TEXT="&#x3bb;-Eing&#xe4;nge">
<linktarget COLOR="#3e2835" DESTINATION="ID_1046477455" ENDARROW="Default" ENDINCLINATION="15;-31;" ID="Arrow_ID_1124233052" SOURCE="ID_10896035" STARTARROW="None" STARTINCLINATION="-48;7;"/>
<node CREATED="1692566398897" ID="ID_389964436" MODIFIED="1692566403127" TEXT="post"/>
<node CREATED="1692566404235" ID="ID_881438768" MODIFIED="1692566410798" TEXT="work"/>
<node CREATED="1692566411650" ID="ID_177539975" MODIFIED="1692566413482" TEXT="done"/>
<node CREATED="1692566414305" ID="ID_1178933917" MODIFIED="1692566416203" TEXT="tick"/>
</node>
<node CREATED="1692566489639" ID="ID_1996598339" MODIFIED="1692566493766" TEXT="Steuer-Funktionen">
<node CREATED="1692566497553" ID="ID_1690265718" MODIFIED="1692566507183" TEXT="post &#x27f6; Dispatch"/>
</node>
</node>
<node CREATED="1680563517255" ID="ID_1104189783" MODIFIED="1680563519264" TEXT="Layer-1">
<node CREATED="1692566313239" ID="ID_1808059473" MODIFIED="1692566321794" TEXT="zwei Queues">
<node CREATED="1692566323494" ID="ID_613099653" MODIFIED="1692566329257" TEXT="Dispatch (Eingang)"/>
<node CREATED="1692566330437" ID="ID_678232879" MODIFIED="1692566338568" TEXT="Priority (Zeitordnung)"/>
</node>
</node>
</node>
<node CREATED="1688438172401" ID="ID_1302126473" MODIFIED="1688438176429" TEXT="Memory-Manager"/>
<node CREATED="1688438177472" ID="ID_854658770" MODIFIED="1688438183516" TEXT="Weiterentwicklung">