Activity-Lang: consider logic for dependency notification
...turns out there is still a lot of leeway in the possible implementation, and seemingly it is too early to decide which case to consider the default. Thus I'll proceed with the drafted preliminary solution... - on primary-chain, an inhibited Gate dispatches itself into future for re-check - on Notification, activation happens if and only if this very notification opens the Gate - provide a specifically wired requireDirectActivation() to allow enforcing a minimal start time
This commit is contained in:
parent
07fcc89e6a
commit
14effc2349
4 changed files with 349 additions and 23 deletions
|
|
@ -116,7 +116,7 @@ namespace gear {
|
|||
|
||||
|
||||
/**
|
||||
* @return entrance point to this Activity-chain setup
|
||||
* @return entrance point to this Activity-chain setup.
|
||||
* @remark use this call for instructing the Scheduler.
|
||||
*/
|
||||
Activity&
|
||||
|
|
@ -126,6 +126,60 @@ namespace gear {
|
|||
return *post_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builder operation: block this Term waiting for prerequisite notification.
|
||||
* @param notificationSrc an `NOTIFY`-Activity to attach the notification-link
|
||||
* @note using this feature implies to wire in a `GATE`-Activity (if not already
|
||||
* present) and to increase the Gate's latch counter. Moreover, the Argument,
|
||||
* _must be a `NOTIFY`_ and will be modified to store the link to this receiving
|
||||
* Gate; typically this function is actually invoked starting from the other
|
||||
* Term — the prerequisite — by invoking `appendNotificationTo(targetTerm)`.
|
||||
*/
|
||||
Term&
|
||||
expectNotification (Activity& notificationSrc)
|
||||
{
|
||||
REQUIRE (Activity::NOTIFY == notificationSrc.verb_);
|
||||
setupGate();
|
||||
ENSURE (gate_);
|
||||
ENSURE (Activity::GATE == gate_->verb_);
|
||||
gate_->data_.condition.incDependencies();
|
||||
notificationSrc.data_.notification.target = gate_;
|
||||
return *this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builder operation: append a Notification link to the end of this Term's chain.
|
||||
* @param targetTerm another Term, which thereby becomes dependent on this Term.
|
||||
* @remark the \q targetTerm will be inhibited, until this Term's chain has
|
||||
* been activated and processed up to emitting the inserted `NOTIFY`.
|
||||
*/
|
||||
Term&
|
||||
appendNotificationTo (Term& targetTerm)
|
||||
{
|
||||
UNIMPLEMENTED ("append NOTIFY and wire this through target.expectNotification()");
|
||||
return *this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert a self-inhibition to enforce activation is possible only after the
|
||||
* scheduled start time. Relevant for Jobs, which are to be triggered by external
|
||||
* events, while the actual computation must not be start prior to activating the
|
||||
* main chain, even if all prerequisites are already fulfilled.
|
||||
* @remark typical example is when a target buffer is known to be available only
|
||||
* after the planned start time and until the planned deadline.
|
||||
* @note the actual activation always goes through Activity::dispatch() and the
|
||||
* primary chain is aborted with activity::SKIP. However, since the additional
|
||||
* notification is inserted at a point executed holding the `GroomingToken`,
|
||||
* the `dispatch()` actually happens synchronous and immediately processes
|
||||
* the activated tail-chain in a nested call.
|
||||
*/
|
||||
Term&
|
||||
requireDirectActivation()
|
||||
{
|
||||
UNIMPLEMENTED ("wire in self-Notification");
|
||||
return *this;
|
||||
}
|
||||
|
||||
private:
|
||||
void
|
||||
configureTemplate (Template kind)
|
||||
|
|
|
|||
|
|
@ -81,6 +81,7 @@ namespace test {
|
|||
dispatchChain();
|
||||
|
||||
scenario_RenderJob();
|
||||
scenario_Notification();
|
||||
scenario_IOJob();
|
||||
scenario_MetaJob();
|
||||
}
|
||||
|
|
@ -493,6 +494,55 @@ namespace test {
|
|||
|
||||
|
||||
|
||||
/** @test TODO usage scenario: Notification from prerequisite Jobs within time window
|
||||
* - build [similar](\ref #scenario_RenderJob) »CalculationJob« wiring
|
||||
* - configure extended dependency notification capabilities
|
||||
* - Case-1 : a Notification decreases the latch, but blocks otherwise
|
||||
* - Case-2 : when the primary chain is activated after the Notification,
|
||||
* then the tail chain behind the Gate is dispatched
|
||||
* @todo WIP 8/23 🔁 define ⟶ implement
|
||||
*/
|
||||
void
|
||||
scenario_Notification()
|
||||
{
|
||||
Time nominal{7,7};
|
||||
|
||||
Time start{0,1};
|
||||
Time dead{0,10};
|
||||
Time now{555,5};
|
||||
|
||||
ActivityDetector detector;
|
||||
Job testJob{detector.buildMockJob("testJob", nominal, 12345)};
|
||||
|
||||
BlockFlowAlloc bFlow;
|
||||
ActivityLang activityLang{bFlow};
|
||||
auto term = activityLang.buildCalculationJob (testJob, start,dead);
|
||||
|
||||
Activity& anchor = term.post();
|
||||
// insert instrumentation to trace activation
|
||||
detector.watchGate (anchor.next, "theGate");
|
||||
|
||||
// establish a blocking prerequisite dependency
|
||||
Activity trigger{Activity::NOTIFY};
|
||||
// ...in real usage this happens from building the dependency's Term
|
||||
term.expectNotification (trigger);
|
||||
|
||||
// additionally insert inhibition prior to primary-chain activation
|
||||
term.requireDirectActivation();
|
||||
|
||||
CHECK (activity::PASS == ActivityLang::dispatchChain (anchor, now, detector.executionCtx));
|
||||
|
||||
CHECK (detector.verifyInvocation("theGate").arg("5.555 ⧐ Act(GATE")
|
||||
.beforeInvocation("after-theGate").arg("⧐ Act(WORKSTART")
|
||||
.beforeInvocation("CTX-work").arg("5.555","")
|
||||
.beforeInvocation("testJob") .arg("7.007",12345)
|
||||
.beforeInvocation("CTX-done").arg("5.555",""));
|
||||
|
||||
cout << detector.showLog()<<endl;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** @test TODO usage scenario: Activity graph for an async Job
|
||||
* @todo WIP 8/23 🔁 define ⟶ implement
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -7041,7 +7041,7 @@ __see also__
|
|||
&rarr; the protocol [[how to operate the nodes|NodeOperationProtocol]]
|
||||
</pre>
|
||||
</div>
|
||||
<div title="RenderOperationLogic" creator="Ichthyostega" modifier="Ichthyostega" created="202307272322" modified="202308291336" tags="Rendering operational draft" changecount="27">
|
||||
<div title="RenderOperationLogic" creator="Ichthyostega" modifier="Ichthyostega" created="202307272322" modified="202308311809" tags="Rendering operational draft" changecount="28">
|
||||
<pre>//The operational logic of Activity execution is the concrete service provided by the [[Scheduler]] to implement interwoven [[render Activities|RenderActivity]] and [[Job execution|RenderJob]].//
|
||||
* logically, each {{{Activity}}} record represents a //verb// to describe some act performed by »the render process«
|
||||
* the {{{ActivityLang}}} provides a //builder notation// to build „sentences of activities“ and it sets the framework for //execution// of Activities
|
||||
|
|
@ -7123,9 +7123,9 @@ Since the render engine can be considered performance critical, only a fixed set
|
|||
:** ⟹ the Activity Language invokes the ''λ-tick''
|
||||
|
||||
!!!Post and dispatch
|
||||
An Activity is //performed// by invoking its {{{activate(now, ctx)}}} function -- however, there is a twist: some Activities require interaction with the Scheduler queue or may even alter this queue -- and such Activities must be performed //in »management mode«// (single threaded, holding the {{{GroomingToken}}}). These requirements can be fulfilled by //dispatching// an Activity through the ''λ-post'', which attempts to acquire the {{{GroomingToken}}} and otherwise sends the action through the //dispatch queue.// Moreover, some follow-up activities need to happen //later// -- and this can be encoded by using a {{{POST}}}-Activity, which both defines a time window of execution and causes its chain-Activity to be sent through ''λ-post''.
|
||||
An Activity is //performed// by invoking its {{{activate(now, ctx)}}} function -- however, there is a twist: some Activities require interaction with the Scheduler queue or may even alter this queue -- and such Activities must be performed //in »management mode«// (single threaded, holding the {{{GroomingToken}}}). These requirements can be fulfilled by //dispatching// an Activity through the ''λ-post'', which attempts to acquire the {{{GroomingToken}}} to proceed directly -- and otherwise sends the action through the //dispatch queue.// Moreover, some follow-up activities need to happen //later// -- and this can be encoded by using a {{{POST}}}-Activity, which both defines a time window of execution and causes its chain-Activity to be sent through ''λ-post''.
|
||||
|
||||
In a similar vein, also ''notifications'' need to happen decoupled from the activity chain from which they originate; thus the Post-mechanism is also used for dispatching notifications. Yet notifications are to be treated specially, since they are directed towards a receiver, which in the standard case is a {{{GATE}}}-Activity and will respond by //decrementing its internal latch.// Consequently, receiving a notification may cause the Gate to become opened; in this case the trigger is passed through a further dispatch through the ''λ-post'' to activate the chain-Activities hooked behind the Gate. The implementation of this state transition logic ensures that this chain behind a Gate can only be //activated once.//
|
||||
In a similar vein, also ''dependency notifications'' need to happen decoupled from the activity chain from which they originate; thus the Post-mechanism is also used for dispatching notifications. Yet notifications are to be treated specially, since they are directed towards a receiver, which in the standard case is a {{{GATE}}}-Activity and will respond by //decrementing its internal latch.// Consequently, receiving a notification may cause the Gate to become opened; in this case the trigger is passed through a further dispatch through the ''λ-post'' to activate the chain-Activities hooked behind the Gate. Otherwise, if the latch is already zero (or the deadline has passed), nothing happens. Thus the implementation of state transition logic ensures the chain behind a Gate can only be //activated once.//
|
||||
</pre>
|
||||
</div>
|
||||
<div title="RenderProcess" modifier="Ichthyostega" created="200706190705" modified="201112162056" tags="Rendering operational">
|
||||
|
|
|
|||
|
|
@ -76517,6 +76517,11 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<linktarget COLOR="#743f58" DESTINATION="ID_1858134894" ENDARROW="Default" ENDINCLINATION="-547;24;" ID="Arrow_ID_313746889" SOURCE="ID_1276102583" STARTARROW="None" STARTINCLINATION="-1607;-121;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1693501342420" ID="ID_1800524836" MODIFIED="1693501398786" TEXT="async-IO muß Memory-Manager blocken">
|
||||
<arrowlink COLOR="#fe3e84" DESTINATION="ID_623622318" ENDARROW="Default" ENDINCLINATION="-812;50;" ID="Arrow_ID_1026891728" STARTARROW="None" STARTINCLINATION="437;29;"/>
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -77491,10 +77496,24 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1688998714647" ID="ID_1212520042" MODIFIED="1688998724793" TEXT="frühestmoglich Start-Zeit / Deadline"/>
|
||||
</node>
|
||||
<node CREATED="1688998737324" ID="ID_1359190642" MODIFIED="1688998829651" TEXT="GATE">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688998831183" ID="ID_158897194" MODIFIED="1688998848054" TEXT="Inhibitor-Mechanismus muß zu frühe Freigabe verhindern">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688998831183" ID="ID_158897194" MODIFIED="1693502275691" TEXT="Inhibitor-Mechanismus muß zu frühe Freigabe verhindern">
|
||||
<linktarget COLOR="#5f98b9" DESTINATION="ID_158897194" ENDARROW="Default" ENDINCLINATION="597;427;" ID="Arrow_ID_908519316" SOURCE="ID_706646924" STARTARROW="None" STARTINCLINATION="912;57;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1689169379528" ID="ID_130475381" MODIFIED="1689169406964" TEXT="stellt sich die Frage nach Regel und Ausnahme">
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1689169379528" ID="ID_130475381" MODIFIED="1693500400879" TEXT="stellt sich die Frage nach Regel und Ausnahme">
|
||||
<linktarget COLOR="#ff8c4a" DESTINATION="ID_130475381" ENDARROW="Default" ENDINCLINATION="-1002;56;" ID="Arrow_ID_501288232" SOURCE="ID_1158823061" STARTARROW="None" STARTINCLINATION="1201;66;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1693500445141" ID="ID_49874460" MODIFIED="1693500463973" TEXT="Inhibitor ist der Regelfall ⟹">
|
||||
<node CREATED="1693500501765" ID="ID_1102377205" MODIFIED="1693500532852" TEXT="dann sollte die Notification überhaupt keine Aktivierung (mehr) bewirken"/>
|
||||
<node CREATED="1693500554621" ID="ID_1265964500" MODIFIED="1693500571590" TEXT="mit dieser Änderung wäre auch kein Inhibitor mehr notwendig"/>
|
||||
<node CREATED="1693500572275" ID="ID_428340322" MODIFIED="1693500597467" TEXT="stattdessen re-triggert sich das Gate, bis alle Voraussetzungen gegeben sind"/>
|
||||
</node>
|
||||
<node CREATED="1693500491838" ID="ID_857680063" MODIFIED="1693500497833" TEXT="Event-Trigger ist der Regelfall ⟹">
|
||||
<node CREATED="1693500602346" ID="ID_102624837" MODIFIED="1693500662762" TEXT="dann würde in der Regel sofort getriggert, sobald die Vorraussetzungen gegeben sind"/>
|
||||
<node CREATED="1693500663638" ID="ID_85164137" MODIFIED="1693500682336" TEXT="und die Zeitsteuerung der Vorraussetzungen würde die Koordinierung leisten"/>
|
||||
<node CREATED="1693500684108" ID="ID_1942907265" MODIFIED="1693500705970" TEXT="somit wäre eine zeitgesteuerte Aktivierung überhaupt nicht notwendig"/>
|
||||
<node CREATED="1693500706577" ID="ID_1660915486" MODIFIED="1693500727098" TEXT="und der Haupt-Chain könnte „frei hängen“"/>
|
||||
<node CREATED="1693500748179" ID="ID_520416912" MODIFIED="1693500762541" TEXT="die Notification müßte dann aber auch zuverlässig kommen"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1689169457943" ID="ID_1317092933" MODIFIED="1689169572378" TEXT="man könnte ein NOTIFY explizit disponieren">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -77506,6 +77525,12 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
<node COLOR="#435e98" CREATED="1693500810783" ID="ID_1401320088" MODIFIED="1693500823241" TEXT="diese Lösung vorerst umgesetzt">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node CREATED="1693500823905" ID="ID_1958526971" MODIFIED="1693500843764" TEXT="derzeit allerdings nur auf Verdacht">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#5b280f" CREATED="1689169614354" ID="ID_969910286" MODIFIED="1690490579815" TEXT="man könnte aber auch genau den gleichen Mechanismus direkt in GATE einbauen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -77730,6 +77755,42 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693495502528" ID="ID_1513616803" MODIFIED="1693495682843" TEXT="Dependency-Notifications herstellen">
|
||||
<linktarget COLOR="#865257" DESTINATION="ID_1513616803" ENDARROW="Default" ENDINCLINATION="910;65;" ID="Arrow_ID_1729642753" SOURCE="ID_99848990" STARTARROW="None" STARTINCLINATION="987;-87;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1693495715425" HGAP="40" ID="ID_1961334483" MODIFIED="1693495750410" TEXT="in der Planning-Pipeline ist der abhängige Folge-Job als »Parent« zugänglich" VSHIFT="-7">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1693495768326" HGAP="85" ID="ID_1696760158" MODIFIED="1693495799275" TEXT="daher ⟹ vom Ende zum Nachfolger schalten" VSHIFT="-1">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693495830346" ID="ID_1261227945" MODIFIED="1693496221054" TEXT="appendNotificationTo(targetTerm)">
|
||||
<arrowlink COLOR="#786889" DESTINATION="ID_701999603" ENDARROW="Default" ENDINCLINATION="-1087;-893;" ID="Arrow_ID_893699409" STARTARROW="None" STARTINCLINATION="-687;55;"/>
|
||||
<arrowlink COLOR="#4b8acc" DESTINATION="ID_1367094984" ENDARROW="Default" ENDINCLINATION="72;7;" ID="Arrow_ID_164230628" STARTARROW="None" STARTINCLINATION="119;9;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693495853623" ID="ID_1367094984" MODIFIED="1693496213723" TEXT="expectNotification(Activity&)">
|
||||
<linktarget COLOR="#4b8acc" DESTINATION="ID_1367094984" ENDARROW="Default" ENDINCLINATION="72;7;" ID="Arrow_ID_164230628" SOURCE="ID_1261227945" STARTARROW="None" STARTINCLINATION="119;9;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693496733832" ID="ID_704638049" MODIFIED="1693496737576" TEXT="requireDirectActivation()">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1693496745497" ID="ID_1227868232" MODIFIED="1693496759948" TEXT="optionales Zusatz-Feature">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1693496761812" ID="ID_1871769449" MODIFIED="1693497758267" TEXT="stellt eine bindende Startzeit-Schwelle her">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Falls es eine zeitliche Grenze gibt, vor der die Berechnungen grundsätzlich nicht starten sollen — beispielsweise weil die Ergebnis-Daten in einen Puffer geschrieben werden, der erst ab einem bestimmten Zeitpunkt verfügbar ist; dies wird dann <i>indirekt codiert durch den Start-Zeitpunkt</i> der Haupt-Berechnung, und das Einschleifen einer Notification auf das direkt nachfolgende Gate, was dazu führt, daß eine extern empfangene Notification von abgeschlossenen Vorgänger-Berechnungen erst <i>nach diesem Zeitpunkt</i> das Gate öffnen können. Diese interne Freischaltungs-Notification wird direkt hinter dem Ankerpunkt (dem POST) eingehängt, verwendet aber ansonsten die vorhandenen Mechanismen (indirekte Aktivierung über den Dispatch-hook)
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688999216020" ID="ID_1652417442" MODIFIED="1689000686850" TEXT="Nutzungs-Zyklus">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
|
|
@ -78080,11 +78141,50 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<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="233;-20;"/>
|
||||
</node>
|
||||
<node CREATED="1692544036224" ID="ID_1531555498" LINK="#ID_846298052" MODIFIED="1692544299830" TEXT="die Deadline selber ist bereits ausgeschlossen"/>
|
||||
<node CREATED="1692544036224" ID="ID_1531555498" LINK="#ID_846298052" MODIFIED="1693499473498" TEXT="der Deadline-Zeitpunkt selbst sperrt bereits">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<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«"/>
|
||||
<node CREATED="1690069773157" ID="ID_1756992465" MODIFIED="1690069785879" TEXT="Problem: wer bestimmt um wie viel?">
|
||||
<node CREATED="1690069315708" ID="ID_1571780277" MODIFIED="1690069346741" TEXT="...soll sich das Gate »selbst in die Zukunft schieben«">
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1693499693849" ID="ID_1878976712" MODIFIED="1693501299248" TEXT="ist dieses Feature überhaupt notwendig?">
|
||||
<linktarget COLOR="#9671cb" DESTINATION="ID_1878976712" ENDARROW="Default" ENDINCLINATION="-1051;64;" ID="Arrow_ID_1465904567" SOURCE="ID_1514365592" STARTARROW="None" STARTINCLINATION="624;46;"/>
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1693500036651" ID="ID_891303584" MODIFIED="1693500110260" TEXT="aus generisch-logischen Gründen eingeführt">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node CREATED="1693500048618" ID="ID_756123423" MODIFIED="1693500318044" TEXT="überflüssig falls externer Trigger ausschließlich per Notification kommt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
....denn die Implementierung des Notification-Dispatch erkennt, wenn eine Notification das Gate öffnet, und dispatched in diesem Fall den Chain sofort zur Ausführung und sperrt dann auch das Gate endgültig; das bedeutet: wenn die Aktivierung über diesen Mechanismus erfolgt, wird ein geplanter re-Trigger niemals zum Zug kommen (sondern dann stets ein bereits gesperrtes Gate vorfinden
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1693500320700" ID="ID_1158823061" MODIFIED="1693501668230">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
entscheidendes Kriterium: <i>was ist der Regelfall?</i>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#ff8c4a" DESTINATION="ID_130475381" ENDARROW="Default" ENDINCLINATION="-1002;56;" ID="Arrow_ID_501288232" STARTARROW="None" STARTINCLINATION="1201;66;"/>
|
||||
<arrowlink COLOR="#ff835a" DESTINATION="ID_1677810131" ENDARROW="Default" ENDINCLINATION="266;-21;" ID="Arrow_ID_1264674848" STARTARROW="None" STARTINCLINATION="-317;19;"/>
|
||||
<icon BUILTIN="bell"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1690069773157" FOLDED="true" ID="ID_1756992465" MODIFIED="1693501586447" TEXT="Problem: wer bestimmt um wie viel?">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1690069811256" ID="ID_743760450" MODIFIED="1690069828122" TEXT="konstanter Step ⟹ spinning"/>
|
||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1690491378700" ID="ID_1592003148" MODIFIED="1690491504993">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
|
|
@ -78125,6 +78225,59 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<arrowlink DESTINATION="ID_817512371" ENDARROW="Default" ENDINCLINATION="-55;19;" ID="Arrow_ID_1228234954" STARTARROW="None" STARTINCLINATION="-170;11;"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1693501591528" ID="ID_332217879" MODIFIED="1693501601917" TEXT="Steuer-Logik">
|
||||
<node CREATED="1693501607721" ID="ID_182057848" MODIFIED="1693501620284" TEXT="primär-Chain">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1693501621611" ID="ID_1677810131" MODIFIED="1693501660623" TEXT="gilt als Regelfall">
|
||||
<linktarget COLOR="#ff835a" DESTINATION="ID_1677810131" ENDARROW="Default" ENDINCLINATION="266;-21;" ID="Arrow_ID_1264674848" SOURCE="ID_1158823061" STARTARROW="None" STARTINCLINATION="-317;19;"/>
|
||||
<icon BUILTIN="bell"/>
|
||||
</node>
|
||||
<node CREATED="1693501675079" ID="ID_1175823594" MODIFIED="1693501687857" TEXT="läuft bei offenem Gate unmittelbar durch"/>
|
||||
<node CREATED="1693501693061" ID="ID_1925544668" MODIFIED="1693501698656" TEXT="bricht sonst mit SKIP ab"/>
|
||||
</node>
|
||||
<node CREATED="1693501703675" ID="ID_1198687710" MODIFIED="1693501710273" TEXT="Notification">
|
||||
<node CREATED="1693501711283" ID="ID_1997106163" MODIFIED="1693501726005" TEXT="dekrementiert stets das Latch"/>
|
||||
<node CREATED="1693501726593" ID="ID_1647318573" MODIFIED="1693501760642">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
<b>nur</b> wenn <b>dadruch</b> das Latch ⟼ 0 geht
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<node CREATED="1693501762324" ID="ID_31439546" MODIFIED="1693501807025" TEXT="dispatch Chain">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1693501808094" ID="ID_1931167592" MODIFIED="1693501833954" TEXT="GroomingToken ⟹ führt effektiv sofort zur Ausführung(nested)"/>
|
||||
<node CREATED="1693501834610" ID="ID_823848881" MODIFIED="1693501863067" TEXT="sonst ⟹ Dispatch-Queue und als nächste freie Aktion ausgeführt"/>
|
||||
</node>
|
||||
<node CREATED="1693501769499" ID="ID_1059675453" MODIFIED="1693501790365" TEXT="Gate endgültig sperren">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
indem die deadline ≔ Time::MIN
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1693501874533" ID="ID_627786574" MODIFIED="1693501882023" TEXT="sonst ⟹ PASS und nichts weiter tun"/>
|
||||
</node>
|
||||
<node CREATED="1693501898442" ID="ID_873026982" MODIFIED="1693501906935" TEXT="Doppel-Aktivierungen">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1693501908584" ID="ID_1998121077" MODIFIED="1693501918471" TEXT="durch spezielle Logik ausgeschlossen">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1693501927323" ID="ID_806186642" MODIFIED="1693501950406" TEXT="Asymmetrie">
|
||||
<node CREATED="1693501951564" ID="ID_565836616" MODIFIED="1693501951564" TEXT="Notification triggert nur, wenn sie selbst das Gate öffnet"/>
|
||||
<node CREATED="1693501953170" ID="ID_613304999" MODIFIED="1693501967844" TEXT="primär-Chain marschiert durch, prüft aber die Deadaline"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1688998890863" ID="ID_1091142135" MODIFIED="1690736014967" TEXT="WORKSTART">
|
||||
<node CREATED="1690069365933" ID="ID_480174077" MODIFIED="1690735578970" TEXT="λ-work"/>
|
||||
|
|
@ -78303,6 +78456,10 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<arrowlink COLOR="#b14f6e" DESTINATION="ID_462121305" ENDARROW="Default" ENDINCLINATION="-76;7;" ID="Arrow_ID_1396143437" STARTARROW="None" STARTINCLINATION="-74;-111;"/>
|
||||
<arrowlink COLOR="#ff3681" DESTINATION="ID_1642755650" ENDARROW="Default" ENDINCLINATION="-874;84;" ID="Arrow_ID_846448701" STARTARROW="None" STARTINCLINATION="-223;-228;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693496024760" ID="ID_701999603" MODIFIED="1693496147428" TEXT="hierarchische Notification-Beziehungen herstellen">
|
||||
<linktarget COLOR="#786889" DESTINATION="ID_701999603" ENDARROW="Default" ENDINCLINATION="-1087;-893;" ID="Arrow_ID_893699409" SOURCE="ID_1261227945" STARTARROW="None" STARTINCLINATION="-687;55;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -79452,6 +79609,11 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1688258212089" ID="ID_288966469" MODIFIED="1688258228531" TEXT="sonst keine portable Lösung verfügbar"/>
|
||||
<node CREATED="1688258230375" ID="ID_1659248350" MODIFIED="1688258247491" TEXT="mmap und io_uring sind Linux-only"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1693501342420" ID="ID_43618567" MODIFIED="1693502543663" TEXT="Achtung: Wechselwirkung mit Memory-Manager">
|
||||
<arrowlink COLOR="#fe3e84" DESTINATION="ID_623622318" ENDARROW="Default" ENDINCLINATION="-812;50;" ID="Arrow_ID_466178619" STARTARROW="None" STARTINCLINATION="655;38;"/>
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1684980732965" ID="ID_1914429002" MODIFIED="1684980742528" TEXT="Thema: Timing-Updates">
|
||||
|
|
@ -79509,8 +79671,24 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node COLOR="#338800" CREATED="1689202254231" ID="ID_322073846" MODIFIED="1689294940657" TEXT="Eigenschaften einer neu erstellten Epoche">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1689202440952" ID="ID_1233864251" MODIFIED="1689295508928" TEXT="EpochGate-Verhalten">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1689202440952" FOLDED="true" ID="ID_1233864251" MODIFIED="1693502628111" TEXT="EpochGate-Verhalten">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<node CREATED="1693502578373" ID="ID_906293868" MODIFIED="1693502622932" TEXT="bisher nur halb geklärt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Es ist noch nicht klar, wie die Callbacks von async-IO aufgeschaltet werden
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1693502585994" ID="ID_215852439" MODIFIED="1693502626471" TEXT="daher auch nur minimal abgedeckt">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1689202329260" ID="ID_1491199644" MODIFIED="1689294946303" TEXT="Belegen eines Slot">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -79930,18 +80108,6 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node COLOR="#338800" CREATED="1693323299522" ID="ID_1282022548" MODIFIED="1693323306513" TEXT="Grundstruktur verdrahten">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693432027554" ID="ID_1114094454" MODIFIED="1693432038626" TEXT="alle Extras zuschalten">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693432039914" ID="ID_99848990" MODIFIED="1693432176338" TEXT="Aufschalten einer Notification">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693432052935" ID="ID_877534705" MODIFIED="1693432176338" TEXT="Einschleifen einer requireDirectActivation()">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693432167704" ID="ID_1355575152" MODIFIED="1693432176339" TEXT="Anhängen einer Folge-Notification">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1693431821078" ID="ID_783748219" MODIFIED="1693440678716" TEXT="sinnvolle Instrumentierung (um Ausführungssequenz zeigen zu können)">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
|
|
@ -79969,11 +80135,40 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="flag-pink"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693502167005" ID="ID_13120904" MODIFIED="1693502705671" TEXT="scenario_Notification">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693502193641" ID="ID_970318761" MODIFIED="1693502203897" TEXT="Grundstruktur wie scenario_RenderJob">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693432027554" ID="ID_1114094454" MODIFIED="1693432038626" TEXT="alle Extras zuschalten">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693432039914" ID="ID_99848990" MODIFIED="1693495682842" TEXT="Aufschalten einer Notification">
|
||||
<arrowlink COLOR="#865257" DESTINATION="ID_1513616803" ENDARROW="Default" ENDINCLINATION="910;65;" ID="Arrow_ID_1729642753" STARTARROW="None" STARTINCLINATION="987;-87;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693502035815" ID="ID_706646924" MODIFIED="1693502281955" TEXT="Einschleifen einer requireDirectActivation()">
|
||||
<arrowlink COLOR="#5f98b9" DESTINATION="ID_158897194" ENDARROW="Default" ENDINCLINATION="597;427;" ID="Arrow_ID_908519316" STARTARROW="None" STARTINCLINATION="912;57;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693502289659" ID="ID_1184407673" MODIFIED="1693502335094" TEXT="zwei Testfälle">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693502296755" ID="ID_917643294" MODIFIED="1693502333791" TEXT="Notification ⟹ dekrementiert">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693502312416" ID="ID_1139733627" MODIFIED="1693502333791" TEXT="primary-Chain ⟹ dispatch-Chain">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1689200553782" ID="ID_1346681233" MODIFIED="1689200586861" TEXT="scenario_IOJob">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693323299522" ID="ID_392906930" MODIFIED="1693323317032" TEXT="Grundstruktur verdrahten">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693432167704" ID="ID_1355575152" MODIFIED="1693432176339" TEXT="Anhängen einer Folge-Notification">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1689200553782" ID="ID_722630098" MODIFIED="1689200595611" TEXT="scenario_MetaJob">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
|
|
@ -80618,7 +80813,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1688512304121" ID="ID_304428860" MODIFIED="1689268791975" TEXT="die Gates aller Epochen durchprüfen">
|
||||
<node COLOR="#435e98" CREATED="1688512304121" ID="ID_304428860" MODIFIED="1693501118442" TEXT="die Gates aller Epochen durchprüfen">
|
||||
<icon BUILTIN="bell"/>
|
||||
<node CREATED="1688513728333" ID="ID_276339587" MODIFIED="1688513740995" TEXT="Gate sitzt im ersten Slot einer Epoche"/>
|
||||
<node CREATED="1688513742667" ID="ID_849223562" LINK="#ID_1088341634" MODIFIED="1688513840525" TEXT="Gate dient in diesem Fall nur als komplexe Bedingung"/>
|
||||
|
|
@ -80629,6 +80824,19 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<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 BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1693499693849" ID="ID_1766311350" MODIFIED="1693501314685" TEXT="sinnvolle Integration mit async-IO?">
|
||||
<linktarget COLOR="#9671cb" DESTINATION="ID_1766311350" ENDARROW="Default" ENDINCLINATION="-1051;64;" ID="Arrow_ID_972754095" SOURCE="ID_131095214" STARTARROW="None" STARTINCLINATION="469;21;"/>
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1693501200871" ID="ID_740126575" MODIFIED="1693501219657" TEXT="Thema: Zuverlässigkeit der Trigger">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node CREATED="1693501220588" ID="ID_1460182660" MODIFIED="1693501234551" TEXT="Interface zum Aufschalten von Triggern auf betroffene Gates"/>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1693501236493" ID="ID_623622318" MODIFIED="1693502543663" TEXT="dies auch in das Job-Planning mit integrieren">
|
||||
<linktarget COLOR="#fe3e84" DESTINATION="ID_623622318" ENDARROW="Default" ENDINCLINATION="-812;50;" ID="Arrow_ID_1026891728" SOURCE="ID_1800524836" STARTARROW="None" STARTINCLINATION="437;29;"/>
|
||||
<linktarget COLOR="#fe3e84" DESTINATION="ID_623622318" ENDARROW="Default" ENDINCLINATION="-812;50;" ID="Arrow_ID_466178619" SOURCE="ID_43618567" STARTARROW="None" STARTINCLINATION="655;38;"/>
|
||||
<icon BUILTIN="hourglass"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1688513885200" ID="ID_47111804" MODIFIED="1689268918964" TEXT="auf der ersten nicht-obsoleten Epoche stehen bleiben">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -82730,6 +82938,20 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1693499887783" ID="ID_1870927644" MODIFIED="1693499914940" TEXT="für später...">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1693499916691" ID="ID_1453759334" MODIFIED="1693499934621" TEXT="zu überprüfen">
|
||||
<icon BUILTIN="stop"/>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1693499718350" ID="ID_1514365592" MODIFIED="1693501314685" TEXT="muß sich das Gate selbst re-triggern?">
|
||||
<arrowlink COLOR="#9671cb" DESTINATION="ID_1878976712" ENDARROW="Default" ENDINCLINATION="-1051;64;" ID="Arrow_ID_1465904567" STARTARROW="None" STARTINCLINATION="624;46;"/>
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1693499718350" ID="ID_131095214" MODIFIED="1693501311725" TEXT="Integration von async-IO, Memory-Manager und Job-Planning">
|
||||
<arrowlink COLOR="#9671cb" DESTINATION="ID_1766311350" ENDARROW="Default" ENDINCLINATION="-1051;64;" ID="Arrow_ID_972754095" STARTARROW="None" STARTINCLINATION="469;21;"/>
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1685320663808" ID="ID_503599380" MODIFIED="1685320675723" TEXT="Struktur-Elemente">
|
||||
<linktarget COLOR="#f9ffd5" DESTINATION="ID_503599380" ENDARROW="Default" ENDINCLINATION="-127;-352;" ID="Arrow_ID_215108045" SOURCE="ID_779629114" STARTARROW="None" STARTINCLINATION="-65;91;"/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue