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:
parent
b7641115fb
commit
108a5e7ca5
3 changed files with 243 additions and 30 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -78469,7 +78469,7 @@ Date:   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:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1690069222750" ID="ID_817512371" MODIFIED="1690495286268" TEXT="λ-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 über die Queue"/>
|
||||
<node CREATED="1692569105461" ID="ID_1960608539" MODIFIED="1692569164192" TEXT="schließ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ü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 »selbst in die Zukunft schieben«"/>
|
||||
|
|
@ -78612,13 +78618,17 @@ Date:   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ändehalber kann noch eine asynchrone Übergabe (λ) dazwischenliegen">
|
||||
<node CREATED="1690495433254" ID="ID_1805822057" MODIFIED="1692569069328" TEXT="aus Konsistenz-Gründen indirekter Dispatch (u.U asynchron)">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1690069846556" ID="ID_681493814" MODIFIED="1690495242907" TEXT="λ-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ür Instrumentierung">
|
||||
<node CREATED="1690891815995" ID="ID_642006957" MODIFIED="1692569548046" TEXT="als Erweiterungspunkt / fü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="übergibt ExecutionCtx + this"/>
|
||||
|
|
@ -78628,28 +78638,52 @@ Date:   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 ü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ühren">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1692627423725" ID="ID_403843310" MODIFIED="1692627432102" TEXT="abhä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 ⟶ 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 ⟶ 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="übergibt ExecutionCtx + this"/>
|
||||
</node>
|
||||
<node CREATED="1692569286359" ID="ID_246311340" MODIFIED="1692569354921" TEXT="POST ⟶ <*>">
|
||||
<node CREATED="1692569324714" ID="ID_259602812" MODIFIED="1692569349484" TEXT="Activation auf <*>"/>
|
||||
</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="λ-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ü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üngen und Verzweigungen wird dafü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:   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:   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ü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üft countdown-Latch und Start-Zeit"/>
|
||||
<node CREATED="1687994866264" ID="ID_1786817486" MODIFIED="1687994891144" TEXT="falls > 0, re-schedule ⟶ future"/>
|
||||
<node CREATED="1687995197271" ID="ID_1651228511" MODIFIED="1687995814074" TEXT="falls ↷ Deadline ⟶ ��"/>
|
||||
</node>
|
||||
<node CREATED="1687996045519" ID="ID_230365460" MODIFIED="1687996181154" TEXT="notification">
|
||||
<node CREATED="1687996191436" ID="ID_1681650444" MODIFIED="1688337488476" TEXT="Ausfü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> und <b>Dispatch</b>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node CREATED="1692565692906" ID="ID_1749560424" MODIFIED="1692565786682" TEXT="Aktiviertung ⟶ λ-post ⟶ Dispatch ⟹ Ausführung"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1687996191436" ID="ID_1681650444" MODIFIED="1692565911759" TEXT="eigentliche Ausführung stets synchron">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
d.h. wird stehts von einem Worker ausgeführt, der aktuell das GroomingToken hält
|
||||
d.h. wird stehts von einem Worker ausgeführt, der aktuell das GroomingToken hält ⟹ 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:   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:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node COLOR="#338800" CREATED="1689268798076" ID="ID_1723875762" MODIFIED="1689268819063" TEXT="vorläufige Impl: einfach direkt die Deadline prüfen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1689268827023" ID="ID_1220469732" MODIFIED="1689268891847" TEXT="vollstä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ä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:   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:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</body>
|
||||
</html></richcontent>
|
||||
<node CREATED="1685398620907" ID="ID_454350455" MODIFIED="1685398749007" TEXT="»Frame Deadline« ≡ absolute Deadline of delivery"/>
|
||||
<node CREATED="1685398663573" ID="ID_135003232" MODIFIED="1685398735255" TEXT="»Job Deadline« ≡ latest time the Job can be started"/>
|
||||
<node CREATED="1685398713881" ID="ID_1091261870" MODIFIED="1685398773416" TEXT="»Plan Deadline« ≡ latest time to dispatch the calculation plan"/>
|
||||
<node CREATED="1685398663573" ID="ID_135003232" MODIFIED="1692542664588" TEXT="»Job Deadline« ≡ Job must be started before this time point"/>
|
||||
<node CREATED="1685398713881" ID="ID_1091261870" MODIFIED="1692542702567" TEXT="»Plan Deadline« ≡ 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:   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ä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="λ-Eingä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 ⟶ 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">
|
||||
|
|
|
|||
Loading…
Reference in a new issue