Scheduler-test: adapt λ-post to include deadline info
...it seems impossible to solve this conundrum other than by opening a path to override a contextual deadline setting from within the core Activity-Language logic. This will be used in two cases - when processing a explicitly coded POST (using deadline from the POST) - after successfully opening a Gate by NOTIFY (using deadline from Gate) All other cases can now supply Time::NEVER, thereby indicating that the processing layer shall use contextual information (intersection of the time intervals)
This commit is contained in:
parent
3bf3ca095b
commit
206c67cc8a
6 changed files with 92 additions and 115 deletions
|
|
@ -211,7 +211,7 @@ namespace gear {
|
|||
constexpr void
|
||||
_verify_usable_as_ExecutionContext ()
|
||||
{
|
||||
ASSERT_MEMBER_FUNCTOR (&EXE::post, Proc(Time, Activity*, EXE&));
|
||||
ASSERT_MEMBER_FUNCTOR (&EXE::post, Proc(Time, Time, Activity*, EXE&));
|
||||
ASSERT_MEMBER_FUNCTOR (&EXE::work, void(Time, size_t));
|
||||
ASSERT_MEMBER_FUNCTOR (&EXE::done, void(Time, size_t));
|
||||
ASSERT_MEMBER_FUNCTOR (&EXE::tick, Proc(Time));
|
||||
|
|
@ -292,6 +292,14 @@ namespace gear {
|
|||
bool isHold () const { return rest > 0; }
|
||||
bool isFree (Time now) const { return not (isHold() or isDead(now)); }
|
||||
void incDependencies() { ++rest; }
|
||||
|
||||
Time
|
||||
lockPermanently()
|
||||
{
|
||||
auto oldDeadline{dead};
|
||||
dead = Time::MIN;
|
||||
return Time{oldDeadline};
|
||||
}
|
||||
};
|
||||
|
||||
/** Time window to define for activation */
|
||||
|
|
@ -557,33 +565,33 @@ namespace gear {
|
|||
// maybe the Gate has been opened by this notification?
|
||||
if (data_.condition.isFree(now))
|
||||
{//yes => activate gated chain but lock redundant invocations
|
||||
data_.condition.dead = Time::MIN;
|
||||
return postChain (now, executionCtx);
|
||||
Time dead = data_.condition.lockPermanently();
|
||||
return postChain (now,dead, executionCtx);
|
||||
} }
|
||||
return activity::PASS;
|
||||
}
|
||||
|
||||
template<class EXE>
|
||||
activity::Proc
|
||||
dispatchSelf (Time when, EXE& executionCtx)
|
||||
dispatchSelf (Time when, Time dead, EXE& executionCtx)
|
||||
{
|
||||
return executionCtx.post (when, this, executionCtx);
|
||||
return executionCtx.post (when, dead, this, executionCtx);
|
||||
}
|
||||
|
||||
template<class EXE>
|
||||
activity::Proc
|
||||
dispatchSelfDelayed (Time now, EXE& executionCtx)
|
||||
dispatchSelfDelayed (Time now, Time dead, EXE& executionCtx)
|
||||
{
|
||||
dispatchSelf (now + executionCtx.getWaitDelay(), executionCtx);
|
||||
dispatchSelf (now + executionCtx.getWaitDelay(), dead, executionCtx);
|
||||
return activity::SKIP;
|
||||
}
|
||||
|
||||
template<class EXE>
|
||||
activity::Proc
|
||||
postChain (Time when, EXE& executionCtx)
|
||||
postChain (Time when, Time dead, EXE& executionCtx)
|
||||
{
|
||||
REQUIRE (next);
|
||||
return executionCtx.post (when, next, executionCtx);
|
||||
return executionCtx.post (when, dead, next, executionCtx);
|
||||
}
|
||||
|
||||
template<class EXE>
|
||||
|
|
@ -646,7 +654,7 @@ namespace gear {
|
|||
case GATE:
|
||||
return checkGate (now, executionCtx);
|
||||
case POST:
|
||||
return dispatchSelf (Time{data_.timeWindow.life}, executionCtx);
|
||||
return dispatchSelf (Time{data_.timeWindow.life},Time{data_.timeWindow.dead}, executionCtx);
|
||||
case FEED:
|
||||
return activity::PASS;
|
||||
case HOOK:
|
||||
|
|
@ -713,10 +721,10 @@ namespace gear {
|
|||
case HOOK:
|
||||
return notifyHook (now, executionCtx);
|
||||
case POST:
|
||||
case FEED:
|
||||
return postChain (now, executionCtx);
|
||||
case FEED: // ▽▽▽▽▽ implies to use a deadline from the context
|
||||
return postChain (now,Time::NEVER, executionCtx);
|
||||
default:
|
||||
return dispatchSelfDelayed (now, executionCtx);
|
||||
return dispatchSelfDelayed (now,Time::NEVER, executionCtx);
|
||||
} // Fallback: self-re-dispatch for async execution (-> getWaitDelay())
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -505,13 +505,13 @@ namespace gear {
|
|||
* down here as a nested sub-context.
|
||||
*/
|
||||
activity::Proc
|
||||
post (Time when, Activity* chain, ExecutionCtx& ctx)
|
||||
post (Time when, Time dead, Activity* chain, ExecutionCtx& ctx)
|
||||
{
|
||||
REQUIRE (chain);
|
||||
ActivationEvent chainEvent = ctx.rootEvent;
|
||||
chainEvent.activity = chain;
|
||||
chainEvent.starting = _raw(chain->constrainedStart (when));
|
||||
chainEvent.deadline = _raw(chain->constrainedDeath (chainEvent.deathTime()));
|
||||
chainEvent.deadline = _raw(chain->constrainedDeath (dead.isRegular()? dead:chainEvent.deathTime()));
|
||||
ExecutionCtx subCtx{scheduler_, chainEvent};
|
||||
return scheduler_.layer2_.postDispatch (chainEvent, subCtx, scheduler_.layer1_);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -218,6 +218,7 @@ namespace test {
|
|||
activity::_verify_usable_as_ExecutionContext<decltype(detector.executionCtx)>();
|
||||
|
||||
Time t = randTime();
|
||||
Time td{t+Time(0,1)};
|
||||
size_t x = rand();
|
||||
Activity a;
|
||||
|
||||
|
|
@ -232,8 +233,8 @@ namespace test {
|
|||
ctx.done (t,x);
|
||||
CHECK (detector.verifyInvocation(CTX_DONE).arg(t,x));
|
||||
|
||||
CHECK (activity::PASS == ctx.post (t, &a, ctx));
|
||||
CHECK (detector.verifyInvocation(CTX_POST).arg(t,&a,ctx));
|
||||
CHECK (activity::PASS == ctx.post (t,td, &a, ctx));
|
||||
CHECK (detector.verifyInvocation(CTX_POST).arg(t,td,&a,ctx));
|
||||
|
||||
CHECK (activity::PASS == ctx.tick(t));
|
||||
CHECK (detector.verifyInvocation(CTX_TICK).arg(t));
|
||||
|
|
@ -362,7 +363,7 @@ namespace test {
|
|||
ActivityDetector detector;
|
||||
|
||||
Activity chain;
|
||||
Activity gate{1};
|
||||
Activity gate{1, Time{22,22}};
|
||||
gate.next = &chain;
|
||||
Activity notification{&gate};
|
||||
CHECK (gate.data_.condition.rest == 1);
|
||||
|
|
@ -373,7 +374,7 @@ namespace test {
|
|||
notification.dispatch (tt, detector.executionCtx);
|
||||
|
||||
CHECK (detector.verifyInvocation("tap-GATE").arg("11.011 --notify-↯> Act(GATE")
|
||||
.beforeInvocation("CTX-post").arg("11.011", "Act(TICK", "≺test::CTX≻"));
|
||||
.beforeInvocation("CTX-post").arg("11.011","22.022", "Act(TICK", "≺test::CTX≻"));
|
||||
CHECK (gate.data_.condition.rest == 0);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -572,7 +572,7 @@ namespace test {
|
|||
|
||||
|
||||
struct FakeExecutionCtx;
|
||||
using SIG_post = activity::Proc(Time, Activity*, FakeExecutionCtx&);
|
||||
using SIG_post = activity::Proc(Time, Time, Activity*, FakeExecutionCtx&);
|
||||
using SIG_work = void(Time, size_t);
|
||||
using SIG_done = void(Time, size_t);
|
||||
using SIG_tick = activity::Proc(Time);
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@ namespace test {
|
|||
Time tt{5,5};
|
||||
post.activate (tt, detector.executionCtx);
|
||||
|
||||
CHECK (detector.verifyInvocation("CTX-post").arg("11.000", "Act(POST", "≺test::CTX≻"));
|
||||
CHECK (detector.verifyInvocation("CTX-post").arg("11.000","22.000", "Act(POST", "≺test::CTX≻"));
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -157,8 +157,13 @@ namespace test {
|
|||
|
||||
/** @test behaviour of Activity::NOTIFY when _activated_
|
||||
* - notification is dispatched as special message to an indicated target Activity
|
||||
* - when activated, a `NOTIFY`-Activity _posts itself_ through the Execution Context hook
|
||||
* - this way, further processing will happen in management mode (single threaded)
|
||||
* - when activated, a `NOTIFY`-Activity _dispatches_ into the Activity::notify()
|
||||
* of the target Activity
|
||||
* - what happens then depends on the target
|
||||
* - usually the target is a `GATE` (see below), but here for sake of simplicity,
|
||||
* a `TICK`-Activity is used; on notification, this will _post_ itself as new task,
|
||||
* with a delay retrieved from context (here configured to be +1sec), and without
|
||||
* specifying a deadline (thus a deadline from the context will be used).
|
||||
*/
|
||||
void
|
||||
verifyActivity_Notify_activate()
|
||||
|
|
@ -170,7 +175,7 @@ namespace test {
|
|||
Time tt{111,11};
|
||||
notify.activate (tt, detector.executionCtx);
|
||||
|
||||
CHECK (detector.verifyInvocation("CTX-post").arg("11.111", "Act(NOTIFY", "≺test::CTX≻"));
|
||||
CHECK (detector.verifyInvocation("CTX-post").arg("12.111", Time::NEVER, "Act(TICK", "≺test::CTX≻"));
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -286,20 +291,21 @@ namespace test {
|
|||
void
|
||||
verifyActivity_Gate_opened()
|
||||
{
|
||||
Time tt{333,33};
|
||||
Time td{555,55};
|
||||
|
||||
Activity chain;
|
||||
Activity gate{1};
|
||||
Activity gate{1,td};
|
||||
gate.next = &chain;
|
||||
// Conditionals in the gate block invocations
|
||||
CHECK (gate.data_.condition.isHold());
|
||||
CHECK (gate.data_.condition.rest == 1);
|
||||
CHECK (gate.data_.condition.dead == Time::NEVER);
|
||||
CHECK (gate.data_.condition.dead == td);
|
||||
|
||||
ActivityDetector detector;
|
||||
Activity& wiring = detector.buildGateWatcher (gate);
|
||||
|
||||
Time tt{333,33};
|
||||
|
||||
// an attempt to activate blocks (returing SKIP, nothing else happens)
|
||||
// an attempt to activate blocks (returning SKIP, nothing else happens)
|
||||
CHECK (activity::SKIP == wiring.activate (tt, detector.executionCtx));
|
||||
CHECK (1 == gate.data_.condition.rest); // unchanged (and locked)...
|
||||
CHECK (detector.verifyInvocation("tap-GATE").arg("33.333 ⧐ Act(GATE"));
|
||||
|
|
@ -311,7 +317,7 @@ namespace test {
|
|||
|
||||
CHECK (detector.verifyInvocation("tap-GATE").seq(0).arg("33.333 ⧐ Act(GATE")
|
||||
.beforeInvocation("tap-GATE").seq(1).arg("33.333 --notify-↯> Act(GATE")
|
||||
.beforeInvocation("CTX-post").seq(1).arg(tt, "after-GATE", "≺test::CTX≻"));
|
||||
.beforeInvocation("CTX-post").seq(1).arg(tt,td, "after-GATE", "≺test::CTX≻"));
|
||||
CHECK (gate.data_.condition.dead == Time::MIN);
|
||||
|
||||
detector.incrementSeq();
|
||||
|
|
@ -392,8 +398,7 @@ namespace test {
|
|||
* - use a directly wired, arbitrary chain
|
||||
* - dispatch will activate all Activities
|
||||
* - however, when the Gate is configured to be blocked
|
||||
* (waiting on prerequisites), then the rest of the chain is not activated,
|
||||
* only a re-check of the Gate is scheduled for later (1.011 -> 2.011)
|
||||
* (waiting on prerequisites), then the rest of the chain is not activated.
|
||||
* - the dispatch function also handles the notifications;
|
||||
* when a notification towards the Gate is dispatched, the Gate is
|
||||
* decremented and thereby opened; activation of the rest of the chain
|
||||
|
|
@ -403,8 +408,9 @@ namespace test {
|
|||
dispatchChain()
|
||||
{
|
||||
Time tt{11,1};
|
||||
Time td{22,2};
|
||||
Activity tick;
|
||||
Activity gate{0};
|
||||
Activity gate{0,td};
|
||||
gate.next = &tick;
|
||||
Activity post{tt, &gate};
|
||||
// so now we have POST ⟶ GATE ⟶ TICK;
|
||||
|
|
@ -433,7 +439,7 @@ namespace test {
|
|||
|
||||
CHECK (activity::PASS == ActivityLang::dispatchChain (¬ify, detector.executionCtx)); // dispatch a notification (case/seq == 2)
|
||||
CHECK (detector.verifyInvocation("Gate") .seq(2).arg("1.011 --notify-↯> Act(GATE") // ...notification dispatched towards the Gate
|
||||
.beforeInvocation("CTX-post").seq(2).arg("1.011","after-Gate","≺test::CTX≻")); // ...this opened the Gate and posted/requested activation of the rest of the chain
|
||||
.beforeInvocation("CTX-post").seq(2).arg("1.011","2.022","after-Gate","≺test::CTX≻")); // ...this opened the Gate and posted follow-up chain
|
||||
CHECK (detector.ensureNoInvocation("after-Gate").seq(2) // verify that activation was not passed out directly
|
||||
.afterInvocation("CTX-post").seq(2));
|
||||
CHECK (detector.ensureNoInvocation("CTX-tick").seq(2) // verify also the λ-tick was not invoked directly
|
||||
|
|
@ -530,7 +536,7 @@ namespace test {
|
|||
|
||||
// rig the λ-post to forward dispatch as expected in real usage
|
||||
detector.executionCtx.post.implementedAs(
|
||||
[&](Time when, Activity* postedAct, auto& ctx)
|
||||
[&](Time when, Time, Activity* postedAct, auto& ctx)
|
||||
{
|
||||
if (when == ctx.getSchedTime()) // only for POST to run „right now“
|
||||
return ActivityLang::dispatchChain (postedAct, ctx);
|
||||
|
|
@ -548,10 +554,9 @@ namespace test {
|
|||
///// Case-2 : now activate the primary-chain
|
||||
detector.incrementSeq();
|
||||
CHECK (activity::PASS == ActivityLang::dispatchChain (&anchor, detector.executionCtx));
|
||||
CHECK (detector.verifyInvocation("CTX-post").seq(1).arg("5.555","Act(NOTIFY","≺test::CTX≻") // immediately at begin, the internal self-notification is posted
|
||||
.beforeInvocation("deBlock") .seq(1).arg("5.555 --notify-↯> Act(GATE") // ...and then dispatched recursively via ActivityLang::dispatchChain() towards the Gate
|
||||
CHECK (detector.verifyInvocation("deBlock") .seq(1).arg("5.555 --notify-↯> Act(GATE") // immediately at begin, the internal self-notification is dispatched towards the Gate
|
||||
.arg("<1, until 0:00:10.000") // Note: at this point, the Gate-latch expects 1 notifications
|
||||
.beforeInvocation("CTX-post").seq(1).arg("5.555","after-theGate","≺test::CTX≻") // ==> the latch was decremented and the Gate OPENS, and thus post() the tail-chain
|
||||
.beforeInvocation("CTX-post").seq(1).arg("5.555","10.0","after-theGate","≺test::CTX≻") //==> latch was decremented, Gate OPENS, posting the tail-chain with Deadline from Gate
|
||||
.beforeInvocation("after-theGate") .arg("5.555 ⧐ Act(WORKSTART") // ...causing the activation to pass behind the Gate
|
||||
.beforeInvocation("CTX-work").seq(1).arg("5.555","") // ...through WORKSTART
|
||||
.beforeInvocation("testJob") .seq(1).arg("7.007",12345) // ...then invoke the JobFunctor itself (with the nominal Time{7,7})
|
||||
|
|
@ -626,7 +631,7 @@ namespace test {
|
|||
detector.incrementSeq();
|
||||
CHECK (activity::PASS == ActivityLang::dispatchChain (¬ify, detector.executionCtx));
|
||||
CHECK (detector.verifyInvocation("CTX-done").seq(1).arg("5.555", "") // activation of WORKSTOP via callback
|
||||
.beforeInvocation("CTX-post").seq(1).arg("5.555", "Act(NOTIFY", "≺test::CTX≻")); // the following NOTIFY is posted...
|
||||
.beforeInvocation("CTX-post").seq(1).arg("5.555","10.0","WORKSTART","≺test::CTX≻"));// the attached chain is activated, POSTing the second Activity
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -81224,8 +81224,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1702433393182" HGAP="52" ID="ID_747751692" MODIFIED="1702438946061" TEXT="Bedeutung des ExecutionContext.post()" VSHIFT="7">
|
||||
<icon BUILTIN="forward"/>
|
||||
<node CREATED="1702433169325" ID="ID_1315478968" MODIFIED="1702441747966" TEXT="Analyse: wie wird ctx.POST angewendet">
|
||||
<linktarget COLOR="#5e61a8" DESTINATION="ID_1315478968" ENDARROW="Default" ENDINCLINATION="-1360;99;" ID="Arrow_ID_712536449" SOURCE="ID_1967102814" STARTARROW="None" STARTINCLINATION="-1113;94;"/>
|
||||
<linktarget COLOR="#c9e1ff" DESTINATION="ID_1315478968" ENDARROW="Default" ENDINCLINATION="284;-24;" ID="Arrow_ID_1338379371" SOURCE="ID_1782073757" STARTARROW="None" STARTINCLINATION="-364;17;"/>
|
||||
<linktarget COLOR="#5e61a8" DESTINATION="ID_1315478968" ENDARROW="Default" ENDINCLINATION="-1360;99;" ID="Arrow_ID_712536449" SOURCE="ID_1967102814" STARTARROW="None" STARTINCLINATION="-1113;94;"/>
|
||||
<icon BUILTIN="info"/>
|
||||
<node CREATED="1702434084113" ID="ID_1294306408" MODIFIED="1702434087837" TEXT="postChain">
|
||||
<node CREATED="1702434189245" ID="ID_1880105222" MODIFIED="1702434221580" TEXT="receiveGateNotification ⟶ pass">
|
||||
|
|
@ -93490,16 +93490,13 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1702409413423" ID="ID_173246700" MODIFIED="1702409417624" TEXT="spiele etwas mit dem Seed">
|
||||
<node CREATED="1702409419934" ID="ID_1363362334" MODIFIED="1702409484821" TEXT="hoher Seed ⟹ sofort sehr massiv">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
wie im Beispiel im Test: seed=62 ⟹ sehr schnell ein Expand und dann mehrere massive Wellen die bis an den Anschlag gehen
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1702409486157" ID="ID_1757389118" MODIFIED="1702409515942" TEXT="niedriger Seed ⟹ läuft erst mal linear mit kurzen Expansionen"/>
|
||||
<node CREATED="1702409518321" ID="ID_886437201" MODIFIED="1702409524299" TEXT="2 sieht da interessant aus"/>
|
||||
|
|
@ -93517,32 +93514,26 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1702409630298" ID="ID_1073213394" MODIFIED="1702409635845" TEXT="aber nur wennn...."/>
|
||||
<node CREATED="1702409636451" ID="ID_915348913" MODIFIED="1702410224249" TEXT="...man diesen Testfall alleine laufen läßt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...denn <i>normalerweise</i> ist ein calibrate() <i>ganz verträumt </i>  (und sicher nicht zufällig) im ersten simpleUsage-Example versteckt
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1702409646091" ID="ID_483678836" MODIFIED="1702409654968" TEXT="Scheiß Seiteneffekte">
|
||||
<icon BUILTIN="smiley-angry"/>
|
||||
</node>
|
||||
<node CREATED="1702409658182" ID="ID_578883137" MODIFIED="1702410169708" TEXT="einen calibrate() in einem extra-Lauf „verstecken“">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
angeblich um zu demonstrieren, daß der Hash gleich ist...
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<linktarget COLOR="#f42e6f" DESTINATION="ID_578883137" ENDARROW="Default" ENDINCLINATION="-517;28;" ID="Arrow_ID_34504322" SOURCE="ID_1297902680" STARTARROW="None" STARTINCLINATION="89;-97;"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -93625,9 +93616,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1702345592854" ID="ID_1087381356" MODIFIED="1702345637011" TEXT="b8e52d008c15d">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
2023-09-07 17:15:25
|
||||
|
|
@ -93641,9 +93630,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1702345675963" ID="ID_569519663" MODIFIED="1702346301584" TEXT="lt.Changeset: versehentliches Abrunden auf Größe 0"/>
|
||||
<node CREATED="1702346302288" ID="ID_1943758650" MODIFIED="1702346400530" TEXT="das erscheint mir nun etwas übervorsichtig">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
es paßt nicht zum Stil im gesamten Kontext; wir sind hier in Implementierungs-Code, der grundsätzlich davon ausgeht, nur sinnvoll aufgerufen zu werden — es geht nicht darum, einen User „an die Hand zu nehmen“
|
||||
|
|
@ -93674,9 +93661,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1702409721278" ID="ID_1297902680" MODIFIED="1702410169708">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
ist das angemessen,
|
||||
|
|
@ -93694,9 +93679,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="info"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1702409933988" ID="ID_31420496" MODIFIED="1702410129406">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
so manches an diesen Tests hier funktioniert nur<i> scheinbar „einfach“</i>
|
||||
|
|
@ -103124,16 +103107,13 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1702419936169" ID="ID_418237160" MODIFIED="1702419948039" TEXT="mit default-Load = 100µs"/>
|
||||
<node CREATED="1702419982175" ID="ID_1284746634" MODIFIED="1702420397432" TEXT="das wären 62% Overhead">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
164.458 / 1.016*100µs - 1
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1702420028048" ID="ID_672848707" MODIFIED="1702420034443" TEXT="zum Vergleich: die 1.Kette">
|
||||
|
|
@ -103165,16 +103145,13 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1702426755535" ID="ID_1154244224" MODIFIED="1702426773616" TEXT="und zwar werden die post-Contiuations nicht aufgegriffen"/>
|
||||
<node CREATED="1702426798353" ID="ID_550371173" MODIFIED="1702426826082" TEXT="offensichtlich wurden solche eingestellt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
in einem Fall sehe ich das sogar in einer Zeile als "HT" (head time)
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1702426828833" ID="ID_1674499584" MODIFIED="1702426860236" TEXT="wenn diese nicht dispatched werden, bleibt die ganze Kette stecken"/>
|
||||
<node BACKGROUND_COLOR="#b7e4d6" COLOR="#338800" CREATED="1702426865896" ID="ID_473730005" MODIFIED="1702426894031" TEXT="insofern ist das hier ein guter Test">
|
||||
|
|
@ -103188,16 +103165,13 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1702430837918" ID="ID_1202301863" MODIFIED="1702431062199">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
man sieht sofort wo das Problem liegt: die <b>Deadlines </b><font size="6">☠</font>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1702431166600" ID="ID_1215797939" MODIFIED="1702431179836" TEXT="in langen Ketten drehen die ins Negative"/>
|
||||
<node CREATED="1702431180690" ID="ID_1037806616" MODIFIED="1702431234938" TEXT="bei direktem Dispatch wird die Deadline nicht beachtet"/>
|
||||
|
|
@ -103205,16 +103179,13 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node COLOR="#a50181" CREATED="1702431274129" ID="ID_1271232700" MODIFIED="1702431340698">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
nebenbei bemerkt: <i>jeder </i>Dispatch geht auch <b>nochmal </b>durch ctx.post
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1702441820810" ID="ID_848678291" MODIFIED="1702441828412" TEXT="genauere Analyse: das ist nicht jedes..."/>
|
||||
<node CREATED="1702441829015" ID="ID_1855571138" MODIFIED="1702441842982" TEXT="sondern die follow-up-Continuations"/>
|
||||
|
|
@ -103229,16 +103200,13 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="clanbomber"/>
|
||||
<node CREATED="1702431945679" ID="ID_762604723" MODIFIED="1702432270403" TEXT="das ist ein von Anfang an bestehendes Design-Problem">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...und zwar liegt die Wurzel in der <i>Offenheit</i> der Activity-Language; ich wollte (und will) diese nicht auf eine Implementierungs-Logik des Schedulers reduzieren; dadurch sind Redundanzen entstanden, und aus logischen Gründen <i>müßte eingentlich </i>das Zeitfenster [start,dead] vom initialen POST am Anfang der Kette gelten, zumindes »sinngemäß«
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1702432271380" ID="ID_1197394588" LINK="#ID_491166338" MODIFIED="1702432408105" TEXT="die inzwischen gefundene Lösung teilt die Belange in Schichten ein">
|
||||
<node CREATED="1702432577860" ID="ID_52261721" MODIFIED="1702432609300" TEXT="die ActivityLanguage bestimmt ihre Terme allgemein / semantisch"/>
|
||||
|
|
@ -103251,29 +103219,23 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1702432925363" ID="ID_35833830" MODIFIED="1702432944782" TEXT="↯ das widerspricht dem Sinn einer Notification"/>
|
||||
<node CREATED="1702432950945" ID="ID_1056912258" MODIFIED="1702432971284">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
<i>wenn überhaupt</i>, sollte die Deadline des Target gelten
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1702432996363" ID="ID_848803014" MODIFIED="1702433132528" TEXT="nicht diejenige der Quelle (die ja mit dem Gate-pass abgehakt ist)">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Deadlines betreffen <i>die Aktivierung. </i>Es ist die Aufgabe des Job-Planning, das per Verkettung zurückzuführen auf die gewünschte Ankunftszeit. Die Activity-Language könnte das gar nicht tun, denn ihr fehlt dazu die Information über Erfahrungswerte die Ausführungszeit betreffend
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1702433205565" ID="ID_1967102814" MODIFIED="1702441754071" TEXT="zurück zur Requirement-Analyse">
|
||||
|
|
@ -103286,22 +103248,22 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1702443203400" ID="ID_1322656086" MODIFIED="1702443211356" TEXT="sondern liegt auf dem Stack"/>
|
||||
<node CREATED="1702443212207" ID="ID_1744471228" MODIFIED="1702443286350" TEXT="und das ist gut so">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Der Code ist wirklich performance-kritisch, und bis jetzt hab ich richtig gute Werte erziehlt, durch genau diese Art <i>Maßnahmen.</i>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1702443418356" HGAP="46" ID="ID_988047076" MODIFIED="1702443438585" TEXT="....und außerdem ein Zielkonflikt">
|
||||
<node CREATED="1702443442537" ID="ID_1364345409" MODIFIED="1702443458610" TEXT="die Deadlines sichern die Allokation ab"/>
|
||||
<node CREATED="1702443464630" ID="ID_1315697002" MODIFIED="1702443488798" TEXT="andererseits würde ich gerne solche Kaskaden ohne Beschränkung durchlaufen lassen"/>
|
||||
<node COLOR="#435e98" CREATED="1702492092367" ID="ID_760218121" MODIFIED="1702492629377" TEXT="⟹ nur lösbar wenn man die Deadline aus de »Sprach-Ebene« heraus übersteuern kann">
|
||||
<arrowlink COLOR="#a6acc3" DESTINATION="ID_243807249" ENDARROW="Default" ENDINCLINATION="83;0;" ID="Arrow_ID_1148415470" STARTARROW="None" STARTINCLINATION="-197;7;"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -103312,11 +103274,15 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<linktarget COLOR="#51a8aa" DESTINATION="ID_1861186167" ENDARROW="Default" ENDINCLINATION="358;14;" ID="Arrow_ID_926842783" SOURCE="ID_1209140162" STARTARROW="None" STARTINCLINATION="-197;8;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702482072981" ID="ID_243807249" MODIFIED="1702490641549" TEXT="die Möglichkeit schaffen, Deadlines explizit in λ-Post zu übersteuern">
|
||||
<node COLOR="#338800" CREATED="1702482072981" ID="ID_243807249" MODIFIED="1702492629377" TEXT="die Möglichkeit schaffen, Deadlines explizit in λ-Post zu übersteuern">
|
||||
<linktarget COLOR="#a6acc3" DESTINATION="ID_243807249" ENDARROW="Default" ENDINCLINATION="83;0;" ID="Arrow_ID_1148415470" SOURCE="ID_760218121" STARTARROW="None" STARTINCLINATION="-197;7;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node COLOR="#435e98" CREATED="1702492593572" HGAP="54" ID="ID_1343967653" MODIFIED="1702492617089" TEXT="falls nicht gegeben: mit Deadline aus Ctx schneiden" VSHIFT="8">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1702490647104" ID="ID_805768437" MODIFIED="1702490678612" TEXT="Deadline vom Empfänger für follow-up-Continuation nutzen">
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1702490647104" ID="ID_805768437" MODIFIED="1702492083661" TEXT="Deadline vom Empfänger für follow-up-Continuation nutzen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -103352,16 +103318,13 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1702429685693" ID="ID_1578421379" MODIFIED="1702429701767" TEXT="es ist ein isoliertes Teilphänomen von unklarer Relevanz"/>
|
||||
<node CREATED="1702429717649" ID="ID_587876448" MODIFIED="1702429776011" TEXT="die Messung ist mit erheblichen Unsicherheiten behaftet">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
ich weiß nicht, wie gut die CPU-Lasterzeugung funktioniert; Wohl möglich, daß Cache-Effekte die tatsächliche Zeit in de Höhe treiben
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1702429778231" ID="ID_1205464082" MODIFIED="1702429799817" TEXT="die Overheads sind im Bereich der Meßungenauigkeit"/>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue