Scheduler: consider how to maintain active state

- draft the duty cycle »tick«
- investigate corner cases of state updates and allocation managment
- implement start and forcible stop of the scheduler service
This commit is contained in:
Fischlurch 2023-10-29 02:22:05 +01:00
parent 4e9d54e6f9
commit 8505059476
7 changed files with 710 additions and 36 deletions

View file

@ -116,6 +116,13 @@ namespace gear {
}
/** @internal setup a scheduler »Tick« for internal state maintenance */
Activity& createTick (Time deadline){ return mem_.until(deadline).create (Activity::TICK); }
/** @internal propagate new clean-up deadline to the BlockFlow allocator */
void discardBefore (Time deadline) { mem_.discardBefore (deadline); }
/**
* Execution Framework: dispatch performance of a chain of Activities.
*/

View file

@ -151,6 +151,13 @@ namespace gear {
TimeVar tendedHead_{Time::ANYTIME};
public:
/** periodic call to build integrated state indicators */
void
updateState (Time now)
{
/////////////////////////////////////////////////////////////////////////////OOO build integrated load state
}
/**
* did we already tend for the indicated next relevant head time?
* @note const and non-grooming

View file

@ -109,6 +109,14 @@ namespace gear {
{ }
/** forcibly clear out the schedule */
void
discardSchedule()
{
instruct_.consume_all([](auto&){/*obliterate*/});
priority_ = PriorityQueue();
}
/**
* Accept an Activity for time-bound execution
*/
@ -183,6 +191,13 @@ namespace gear {
and priority_.top().waterlevel <= waterLevel(now);
}
/** detect a compulsory Activity with missed deadline */
bool
isOutOfTime() const
{
return false; /////////////////////////////////////////////////////////////////OOO compulsory Activities
}
bool
empty() const
{

View file

@ -130,9 +130,11 @@ namespace gear {
namespace { // Scheduler default config
const auto IDLE_WAIT = 20ms; ///< sleep-recheck cycle for workers deemed _idle_
const size_t DISMISS_CYCLES = 100; ///< number of wait cycles before an idle worker terminates completely
Offset POLL_WAIT_DELAY{FSecs(1,1000)}; ///< delay until re-evaluating a condition previously found unsatisfied
const auto IDLE_WAIT = 20ms; ///< sleep-recheck cycle for workers deemed _idle_
const size_t DISMISS_CYCLES = 100; ///< number of wait cycles before an idle worker terminates completely
Offset POLL_WAIT_DELAY{FSecs(1,1000)}; ///< delay until re-evaluating a condition previously found unsatisfied
Offset DUTY_CYCLE_PERIOD{FSecs(1,20)}; ///< period of the regular scheduler »tick« for state maintenance.
Offset DUTY_CYCLE_TOLERANCE{FSecs(1,10)}; ///< maximum slip tolerated on duty-cycle start before triggering Scheduler-emergency
}
@ -184,22 +186,29 @@ namespace gear {
}
/**
*
* Spark the engine self-regulation cycle and power up WorkForce
*/
void
ignite()
{
UNIMPLEMENTED("suicide");
TRACE (engine, "Ignite Scheduler Dispatch.");
handleDutyCycle (RealClock::now());
workForce_.activate();
}
/**
*
* Bring down processing destructively as fast as possible.
* Dismiss worker threads as soon as possible, and clear the queues.
* @warning Currently running Activities can not be aborted, but anything
* not yet scheduled will be discarded, irrespective of dependencies
*/
void
terminateProcessing()
{
UNIMPLEMENTED("suicide");
TRACE (engine, "Forcibly terminate Scheduler Dispatch.");
workForce_.awaitShutdown();
layer1_.discardSchedule();
}
@ -241,12 +250,16 @@ namespace gear {
private:
void handleDutyCycle (Time now);
void
handleWorkerTermination (bool isFailure)
{
UNIMPLEMENTED("die harder");
}
void triggerEmergency();
/** send this thread into a targeted short-time wait. */
activity::Proc scatteredDelay (Time now, LoadController::Capacity);
@ -477,6 +490,55 @@ namespace gear {
}
/**
* »Tick-hook« : code to maintain sane running status.
* This function will be invoked [regularly](\ref DUTY_CYCLE_PERIOD) while the scheduler
* is actively processing; in fact this function determines when the scheduler falls empty
* and can be shut down — and thus regular invocation is equivalent to running state.
* Code for all kinds of status updates, low-level clean-up and maintenance work related
* to the building blocks of the scheduler shall be added here. It will be invoked from
* within some (random) worker thread, frequently enough for humans to seem like an
* immediate response, but with sufficient large time period to amortise even slightly
* more computational expensive work; IO and possibly blocking operations should be
* avoided here though. Exceptions emanating from here will shut down the engine.
*/
inline void
Scheduler::handleDutyCycle (Time now)
{
// consolidate queue content
layer1_.feedPrioritisation();
//////////////////////////////////////////////////////////////////////OOO clean-up of outdated tasks here
if (layer1_.isOutOfTime())
{
triggerEmergency();
return; // leave everything as-is
}
// clean-up of obsolete Activities
activityLang_.discardBefore (now);
loadControl_.updateState (now);
if (not empty())
{// prepare next duty cycle »tick«
Time nextTick = now + DUTY_CYCLE_PERIOD;
Time deadline = nextTick + DUTY_CYCLE_TOLERANCE;
auto& ctx = ExecutionCtx::from (*this);
Activity& tickActivity = activityLang_.createTick (deadline);
ctx.post(nextTick, &tickActivity, ctx);
}
}
/**
* Trip the emergency brake and unwind processing while retaining all state.
*/
inline void
Scheduler::triggerEmergency()
{
UNIMPLEMENTED ("scheduler overrun -- trigger Emergency");
}
}} // namespace vault::gear
#endif /*SRC_VAULT_GEAR_SCHEDULER_H_*/

View file

@ -132,9 +132,9 @@ namespace gear {
void
pullWork()
{
ASSERT_VALID_SIGNATURE (decltype(CONF::doWork), SIG_WorkFun);
ASSERT_VALID_SIGNATURE (decltype(CONF::finalHook), SIG_FinalHook);
ASSERT_MEMBER_FUNCTOR (&CONF::doWork, SIG_WorkFun);
ASSERT_MEMBER_FUNCTOR (&CONF::finalHook, SIG_FinalHook);
bool regularExit{false};
try /* ================ pull work ===================== */
{

View file

@ -32,7 +32,7 @@
#include "lib/format-cout.hpp"
#include "lib/test/microbenchmark.hpp"
#include "lib/test/diagnostic-output.hpp"///////////////TODO
//#include "lib/util.hpp"
#include "lib/util.hpp"
//#include <utility>
#include <thread>
@ -48,6 +48,7 @@ namespace test {
// using lib::time::FrameRate;
// using lib::time::Offset;
using util::isnil;
using lib::time::Time;
using std::this_thread::sleep_for;
@ -75,6 +76,7 @@ namespace test {
run (Arg)
{
simpleUsage();
verify_StartStop();
invokeWorkFunction();
walkingDeadline();
}
@ -88,7 +90,27 @@ namespace test {
{
BlockFlowAlloc bFlow;
EngineObserver watch;
Scheduler{bFlow, watch};
Scheduler scheduler{bFlow, watch};
}
/** @test TODO get the scheduler into running state
* @todo WIP 10/23 ✔ define ⟶ 🔁 implement
*/
void
verify_StartStop()
{
BlockFlowAlloc bFlow;
EngineObserver watch;
Scheduler scheduler{bFlow, watch};
CHECK (isnil (scheduler));
scheduler.ignite();
CHECK (not isnil (scheduler));
scheduler.terminateProcessing();
CHECK (isnil (scheduler));
}

View file

@ -82227,7 +82227,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1698286167843" ID="ID_3145780" MODIFIED="1698458668582" TEXT="GroomingToken richtig behandeln">
<node COLOR="#338800" CREATED="1698286167843" FOLDED="true" ID="ID_3145780" MODIFIED="1698458668582" TEXT="GroomingToken richtig behandeln">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1698286228019" ID="ID_1492651640" MODIFIED="1698453144418" TEXT="acquire ist korrekt (nochmal &#xfc;berpr&#xfc;ft)">
<icon BUILTIN="button_ok"/>
@ -82314,7 +82314,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="bell"/>
</node>
</node>
<node COLOR="#338800" CREATED="1698372042164" ID="ID_1272410719" MODIFIED="1698518605438" TEXT="Clock-Implementierung">
<node COLOR="#338800" CREATED="1698372042164" FOLDED="true" ID="ID_1272410719" MODIFIED="1698518605438" TEXT="Clock-Implementierung">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1698372415522" ID="ID_932191846" MODIFIED="1698518065927" TEXT="steady_clock verwenden">
<icon BUILTIN="yes"/>
@ -82524,6 +82524,28 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698372095829" ID="ID_259045952" MODIFIED="1698372163476" TEXT="&#x3bb;-done einbinden">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698533894187" ID="ID_1515660165" MODIFIED="1698534658603" TEXT="Mediator / Listener f&#xfc;r Betriebszust&#xe4;nde">
<linktarget COLOR="#ea5540" DESTINATION="ID_1515660165" ENDARROW="Default" ENDINCLINATION="-1517;105;" ID="Arrow_ID_1696922321" SOURCE="ID_1227874220" STARTARROW="None" STARTINCLINATION="912;-77;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1698534009356" ID="ID_538756893" MODIFIED="1698534407291" TEXT="Notwendigkeit zeichnet sich nun klar ab">
<richcontent TYPE="NOTE"><html>
</head>
<body>
<p>
Habe einige Zeit gez&#246;gert, aber nun werden die Verkn&#252;pfungen definitiv zu vielf&#228;ltig. Also stellt der EngineObserver so etwas wie einen &#187;R&#252;ck-Kanal&#171; bereit. Leider stellen sich hiermit erneut die gesamten (hinl&#228;nglich bekannten) Probleme bez&#252;glich der Dom&#228;ne eine Benachrichtigungs-Systems. Zu welchem Grad legt das System die Kommunikation fest? Wie offen oder verbindlich sind die Teilnehmer? Wie stark vorherbestimmt sind die Nachrichten-Inhalte? Wieviel Payload ist notwendig?
</p>
</body>
</html></richcontent>
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698534414605" ID="ID_1231576951" MODIFIED="1698534464760" TEXT="mu&#xdf; im Besonderen die Scheduler-Emergency kommunizieren">
<icon BUILTIN="flag-yellow"/>
</node>
<node CREATED="1698544770139" ID="ID_1280127725" MODIFIED="1698544795910" TEXT="k&#xf6;nnte asynchron und demand-driven arbeiten">
<linktarget COLOR="#fefdd9" DESTINATION="ID_1280127725" ENDARROW="Default" ENDINCLINATION="-176;11;" ID="Arrow_ID_187765169" SOURCE="ID_422887207" STARTARROW="None" STARTINCLINATION="-154;-113;"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1697663918107" ID="ID_210862409" MODIFIED="1697675123151" TEXT="Load-Controller vorsehen">
<linktarget COLOR="#af587f" DESTINATION="ID_210862409" ENDARROW="Default" ENDINCLINATION="-33;645;" ID="Arrow_ID_204955453" SOURCE="ID_1110932778" STARTARROW="None" STARTINCLINATION="250;17;"/>
@ -82613,6 +82635,39 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698544547801" ID="ID_1011726550" MODIFIED="1698544832553" TEXT="regelm&#xe4;&#xdf;ige Integration / state fusion">
<linktarget COLOR="#9e4279" DESTINATION="ID_1011726550" ENDARROW="Default" ENDINCLINATION="235;181;" ID="Arrow_ID_1299019434" SOURCE="ID_897465919" STARTARROW="None" STARTINCLINATION="425;-47;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1698544656547" ID="ID_422887207" MODIFIED="1698544802405" TEXT="l&#xe4;uft (nur) im Tick &#x2014; k&#xf6;nnte daher Statistiken vom EngineObserver beziehen">
<arrowlink COLOR="#fefdd9" DESTINATION="ID_1280127725" ENDARROW="Default" ENDINCLINATION="-176;11;" ID="Arrow_ID_187765169" STARTARROW="None" STARTINCLINATION="-154;-113;"/>
<font NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="idea"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1698524123493" HGAP="7" ID="ID_3688190" MODIFIED="1698524141896" TEXT="Code-Anordnung festlegen" VSHIFT="5">
<icon BUILTIN="hourglass"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698524143083" ID="ID_1366033191" MODIFIED="1698524154797" TEXT="Speicher-Ort f&#xfc;r eine Service-Instanz">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1698524306749" ID="ID_1799403064" MODIFIED="1698524324027" TEXT="&#xdc;berleung: wie wird der Scheduler eingebunden?">
<font NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="help"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698524326034" ID="ID_201292772" MODIFIED="1698524354932" TEXT="ggfs free-Function f&#xfc;r start/stop des Services vorsehen">
<icon BUILTIN="idea"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698524155785" ID="ID_1023938528" MODIFIED="1698524182958" TEXT="dem ensprechend den Implementierungs-Code festlegen">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1698524184757" ID="ID_1803872905" MODIFIED="1698524211085" TEXT="nur wenig Code mu&#xdf; wirklich im Header stehen"/>
<node CREATED="1698524211841" ID="ID_851232758" MODIFIED="1698524300237" TEXT="der Konstruktor-Aufruf emittiert den Kern-Block">
<icon BUILTIN="idea"/>
<node CREATED="1698524251268" ID="ID_327974056" MODIFIED="1698524259015" TEXT="Setup + Verdrahtung"/>
<node CREATED="1698524260075" ID="ID_782075307" MODIFIED="1698524265415" TEXT="WorkForce-Konstruktor"/>
<node CREATED="1698524270265" ID="ID_241115804" MODIFIED="1698524284940" TEXT="bindet work::Worker-Implementierung"/>
<node CREATED="1698524289134" ID="ID_624223134" MODIFIED="1698524295738" TEXT="diese inlined die Scheduler-Internals"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1693172069235" ID="ID_1573845677" MODIFIED="1697675305351" TEXT="Layer-1: SchedulerInvocation"/>
@ -82892,8 +82947,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="yes"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697982455236" ID="ID_645321047" MODIFIED="1697982460315" TEXT="Schemata">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1697982455236" ID="ID_645321047" MODIFIED="1698519641737" TEXT="Schemata">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1697982678423" ID="ID_77969589" MODIFIED="1698072830497" TEXT="tendNext">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1697982717584" ID="ID_267473149" MODIFIED="1698072831864" TEXT="Pr&#xfc;f-Pr&#xe4;dikat: tendedNext()">
@ -82981,8 +83036,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1698026607392" ID="ID_1582820099" MODIFIED="1698196268926" TEXT="NEAR_HORIZON = 50&#xb5;s"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697983292684" ID="ID_1923883572" MODIFIED="1697983303707" TEXT="scatteredDelay">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1697983292684" ID="ID_1923883572" MODIFIED="1698519616657" TEXT="scatteredDelay">
<icon BUILTIN="button_ok"/>
<node CREATED="1697983567535" ID="ID_567326127" MODIFIED="1697983640429" TEXT="ist eine Dispatch-Funktion">
<richcontent TYPE="NOTE"><html>
<head/>
@ -83157,7 +83212,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1698110909230" ID="ID_1719824145" MODIFIED="1698196662708" TEXT="Ausf&#xfc;hren der Verz&#xf6;gerung gem&#xe4;&#xdf; Schema">
<node COLOR="#338800" CREATED="1698110909230" FOLDED="true" ID="ID_1719824145" MODIFIED="1698196662708" TEXT="Ausf&#xfc;hren der Verz&#xf6;gerung gem&#xe4;&#xdf; Schema">
<arrowlink COLOR="#6391ac" DESTINATION="ID_664525403" ENDARROW="Default" ENDINCLINATION="-10;127;" ID="Arrow_ID_225157022" STARTARROW="None" STARTINCLINATION="118;-6;"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1698195684615" ID="ID_491788148" MODIFIED="1698196251944" TEXT="Zuordnung der Namen erscheint etwas verwirrend">
@ -83225,9 +83280,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698003862646" ID="ID_402749835" MODIFIED="1698003871297" TEXT="Integration mit...">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1698003871908" ID="ID_391492289" MODIFIED="1698079188892" TEXT="work-Function">
<node COLOR="#338800" CREATED="1698003871908" ID="ID_391492289" MODIFIED="1698519650070" TEXT="work-Function">
<arrowlink COLOR="#7779a3" DESTINATION="ID_492054934" ENDARROW="Default" ENDINCLINATION="-814;62;" ID="Arrow_ID_817672667" STARTARROW="None" STARTINCLINATION="1393;-112;"/>
<icon BUILTIN="pencil"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1698019149574" HGAP="40" ID="ID_982468485" MODIFIED="1698078066168" TEXT="Fallunterscheidung" VSHIFT="21">
<linktarget COLOR="#378f79" DESTINATION="ID_982468485" ENDARROW="Default" ENDINCLINATION="-84;-47;" ID="Arrow_ID_902782295" SOURCE="ID_1677472042" STARTARROW="None" STARTINCLINATION="31;94;"/>
<icon BUILTIN="button_ok"/>
@ -83275,16 +83330,98 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698159441179" ID="ID_486995126" MODIFIED="1698372610717" TEXT="Scheduler-Tick">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698159441179" ID="ID_486995126" MODIFIED="1698523800078" TEXT="Scheduler-Tick">
<linktarget COLOR="#fffcc5" DESTINATION="ID_486995126" ENDARROW="Default" ENDINCLINATION="579;-95;" ID="Arrow_ID_1801107947" SOURCE="ID_671338782" STARTARROW="None" STARTINCLINATION="292;11;"/>
<linktarget COLOR="#994d72" DESTINATION="ID_486995126" ENDARROW="Default" ENDINCLINATION="-91;14;" ID="Arrow_ID_973238030" SOURCE="ID_1391329454" STARTARROW="None" STARTINCLINATION="71;5;"/>
<linktarget COLOR="#4f89b7" DESTINATION="ID_486995126" ENDARROW="Default" ENDINCLINATION="232;35;" ID="Arrow_ID_1502519432" SOURCE="ID_1247362696" STARTARROW="None" STARTINCLINATION="108;-12;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698523819504" HGAP="114" ID="ID_1592332331" MODIFIED="1698523829332" TEXT="Rahmen schaffen" VSHIFT="8">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1698524392305" ID="ID_1232693946" MODIFIED="1698524394773" TEXT="handleDutyCycle()"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698532933228" ID="ID_1847975334" MODIFIED="1698532967908" TEXT="Periode und Deadline f&#xfc;r Ticks">
<linktarget COLOR="#f03375" DESTINATION="ID_1847975334" ENDARROW="Default" ENDINCLINATION="-449;34;" ID="Arrow_ID_1046093983" SOURCE="ID_233989928" STARTARROW="None" STARTINCLINATION="222;-17;"/>
<icon BUILTIN="flag-yellow"/>
<node COLOR="#435e98" CREATED="1698534503171" ID="ID_1796088889" MODIFIED="1698540893762" TEXT="wo (vor)konfiguriert?">
<icon BUILTIN="help"/>
<node CREATED="1698540895030" ID="ID_111536775" MODIFIED="1698540902950" TEXT="scheduler.hpp"/>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1698540904216" ID="ID_1727121091" MODIFIED="1698540910704" TEXT="Plan: Scheduler-Parameter">
<icon BUILTIN="hourglass"/>
</node>
</node>
<node BACKGROUND_COLOR="#e0d3a2" COLOR="#990000" CREATED="1698534613211" ID="ID_1189633297" MODIFIED="1698541127203" TEXT="Tick-Deadline &#x2261; globale &#xdc;berlastungs-Toleranz des Schedulers">
<arrowlink COLOR="#fd2f46" DESTINATION="ID_1153107499" ENDARROW="Default" ENDINCLINATION="524;-25;" ID="Arrow_ID_251741761" STARTARROW="None" STARTINCLINATION="420;464;"/>
<icon BUILTIN="info"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698523868063" HGAP="124" ID="ID_26600563" MODIFIED="1698523884552" TEXT="Selbst-&#xdc;berwachung">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698534832254" ID="ID_1414543996" MODIFIED="1698534887888" TEXT="Plan: der DutyCycle ist Status-Asessment">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1698534900965" ID="ID_488282572" MODIFIED="1698534907381" TEXT="er ist idempotent"/>
<node CREATED="1698534889399" ID="ID_1021949731" MODIFIED="1698534900169" TEXT="er ist ohne Vorbedingungen stets aufsf&#xfc;hrbar">
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1698544429803" ID="ID_24248194" MODIFIED="1698544506289" TEXT="m&#xf6;gliche Falle: Load-State-Metriken auf Basis der WorkForce">
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1698544455094" ID="ID_726163729" MODIFIED="1698544500012" TEXT="vorteilhaft w&#xe4;re, die WorkForce erst nach dem ersten Tick hochzufahren"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698534920078" ID="ID_1926216575" MODIFIED="1698534936605" TEXT="nach seinem Aufruf ist der Status normalisiert">
<icon BUILTIN="yes"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1698542388722" ID="ID_1120963605" MODIFIED="1698543129256" TEXT="Queue bereinigen">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698542396065" ID="ID_1705516567" MODIFIED="1698543118152" TEXT="mu&#xdf; auch gel&#xf6;schte oder verfallene Eintr&#xe4;ge beseitigen">
<arrowlink COLOR="#7e4dc3" DESTINATION="ID_768314841" ENDARROW="Default" ENDINCLINATION="362;-65;" ID="Arrow_ID_464500099" STARTARROW="None" STARTINCLINATION="213;11;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node COLOR="#338800" CREATED="1698543132047" ID="ID_1879818036" MODIFIED="1698543148250" TEXT="kann auch gleich noch feedPrioritisation() machen">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1697982436029" ID="ID_288711039" MODIFIED="1698073045501" TEXT="Test">
<arrowlink COLOR="#56a5a9" DESTINATION="ID_488605324" ENDARROW="Default" ENDINCLINATION="457;-68;" ID="Arrow_ID_1794430254" STARTARROW="None" STARTINCLINATION="-752;0;"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1698534523065" ID="ID_1249909001" MODIFIED="1698544865983" TEXT="BlockFlow pflegen">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1698534530622" ID="ID_1453816295" MODIFIED="1698544865368" TEXT="der Tick l&#xf6;st die BlockFlow-Bereinigung aus">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#5b280f" CREATED="1698534549651" ID="ID_1836032346" MODIFIED="1698544865368" TEXT="diese mu&#xdf; um einem Sicherheitspuffer verz&#xf6;gert nachfolgen">
<icon BUILTIN="button_cancel"/>
<node CREATED="1698541160966" ID="ID_904830076" MODIFIED="1698544865368" TEXT="wozu?"/>
<node CREATED="1698541168053" ID="ID_878256611" MODIFIED="1698544865368" TEXT="Deadline ist Deadline"/>
<node CREATED="1698541177524" ID="ID_199918854" MODIFIED="1698544865368" TEXT="und der Tick l&#xe4;uft im Grooming-Mode">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
d.h. was grade eben die Deadline &#8222;rei&#223;t&#8220;, kann auch von niemandem mehr gestartet werden
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1698544530128" ID="ID_897465919" MODIFIED="1698544832552" TEXT="Load-Status aktualisieren">
<arrowlink COLOR="#9e4279" DESTINATION="ID_1011726550" ENDARROW="Default" ENDINCLINATION="235;181;" ID="Arrow_ID_1299019434" STARTARROW="None" STARTINCLINATION="425;-47;"/>
<icon BUILTIN="hourglass"/>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1698530480307" ID="ID_355476974" MODIFIED="1698541315516" TEXT="Warnung: Selbstschutz vor de-Allokation">
<arrowlink COLOR="#ff2f19" DESTINATION="ID_269636711" ENDARROW="Default" ENDINCLINATION="-577;-1106;" ID="Arrow_ID_1849442376" STARTARROW="None" STARTINCLINATION="173;762;"/>
<linktarget COLOR="#ed3471" DESTINATION="ID_355476974" ENDARROW="Default" ENDINCLINATION="-616;43;" ID="Arrow_ID_729257748" SOURCE="ID_1982008339" STARTARROW="None" STARTINCLINATION="689;49;"/>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1698530661134" ID="ID_345977666" MODIFIED="1698530674141" TEXT="mu&#xdf; Entgleisen der Steuermechanismen erkennen"/>
<node CREATED="1698530762981" ID="ID_1141545060" MODIFIED="1698530779783" TEXT="und dann die Verarbeitung sauber auslaufen lassen"/>
</node>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1697982436029" ID="ID_288711039" MODIFIED="1698521623327" TEXT="Test">
<arrowlink COLOR="#56a5a9" DESTINATION="ID_488605324" ENDARROW="Default" ENDINCLINATION="457;-68;" ID="Arrow_ID_1794430254" STARTARROW="None" STARTINCLINATION="-752;0;"/>
<arrowlink COLOR="#56a5a9" DESTINATION="ID_1292738036" ENDARROW="Default" ENDINCLINATION="286;-465;" ID="Arrow_ID_367470516" STARTARROW="None" STARTINCLINATION="-752;0;"/>
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1698521316395" ID="ID_1194473945" MODIFIED="1698521326921" TEXT="kann im Test die Timing/Sleep-Muster zeigen">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698372200013" ID="ID_1863445864" MODIFIED="1698372206543" TEXT="Scheduler start/stop">
@ -83296,9 +83433,97 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698372288228" ID="ID_1391329454" MODIFIED="1698372361257" TEXT="richtiges Zusammenspiel mit dem Tick">
<arrowlink COLOR="#994d72" DESTINATION="ID_486995126" ENDARROW="Default" ENDINCLINATION="-91;14;" ID="Arrow_ID_973238030" STARTARROW="None" STARTINCLINATION="71;5;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1698372366569" HGAP="31" ID="ID_581955078" MODIFIED="1698372383660" TEXT="der Tick mus von selber stehen bleiben" VSHIFT="18"/>
<node CREATED="1698372366569" HGAP="31" ID="ID_581955078" MODIFIED="1698539690981" TEXT="der Tick mu&#xdf; von selber anhalten" VSHIFT="18"/>
<node CREATED="1698372384694" HGAP="25" ID="ID_1896236351" MODIFIED="1698372393274" TEXT="damit f&#xe4;llt die Queue leer"/>
</node>
<node CREATED="1698522290233" ID="ID_1911911283" MODIFIED="1698522313757" TEXT="Status bereits &#xfc;ber empty() / isnil() ersichtlich">
<icon BUILTIN="idea"/>
<node CREATED="1698522320375" ID="ID_1572899444" MODIFIED="1698522328008" TEXT="solange der Tick tickt, kann er nicht leer sein"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698522456723" ID="ID_1793836905" MODIFIED="1698522465322" TEXT="Zustands&#xfc;berg&#xe4;nge realisieren">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698522466298" ID="ID_1846809868" MODIFIED="1698522524910" TEXT="ignite() &#x27f6; Tick etablieren">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1698523669922" HGAP="21" ID="ID_1926013578" MODIFIED="1698545591203" TEXT="ggfs. internen Reset?" VSHIFT="-14">
<arrowlink COLOR="#ecfdbe" DESTINATION="ID_1951108355" ENDARROW="Default" ENDINCLINATION="-66;-3;" ID="Arrow_ID_632624217" STARTARROW="None" STARTINCLINATION="16;2;"/>
<icon BUILTIN="help"/>
<node CREATED="1698545349628" ID="ID_635933117" MODIFIED="1698545369376" TEXT="betrifft vor allem den LoadController"/>
<node CREATED="1698545387305" ID="ID_1133340355" MODIFIED="1698545484215" TEXT="abgesehen davon hat der Scheduler nur Daten-bezogenen kontextuellen State"/>
<node CREATED="1698545562226" HGAP="29" ID="ID_891146084" MODIFIED="1698545583796" TEXT="er sollte mit normalen Methoden aus jedem Load-Zustand sauber anlaufen" VSHIFT="-10"/>
</node>
<node COLOR="#338800" CREATED="1698523636422" ID="ID_1247362696" MODIFIED="1698545597610" TEXT="eine Tick-Activity absetzen">
<arrowlink COLOR="#4f89b7" DESTINATION="ID_486995126" ENDARROW="Default" ENDINCLINATION="232;35;" ID="Arrow_ID_1502519432" STARTARROW="None" STARTINCLINATION="108;-12;"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1698544892271" ID="ID_1951108355" MODIFIED="1698545516901" TEXT="Update und Tick-Planung durch DutyCycle-Tick selber">
<linktarget COLOR="#ecfdbe" DESTINATION="ID_1951108355" ENDARROW="Default" ENDINCLINATION="-66;-3;" ID="Arrow_ID_632624217" SOURCE="ID_1926013578" STARTARROW="None" STARTINCLINATION="16;2;"/>
<icon BUILTIN="idea"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698523685888" ID="ID_993061444" MODIFIED="1698523699870" TEXT="die WorkForce starten">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1698523713636" ID="ID_1082114161" MODIFIED="1698523721739" TEXT="hier k&#xf6;nnte man schrittweise vorgehen">
<icon BUILTIN="hourglass"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698523722518" ID="ID_153443695" MODIFIED="1698523747167" TEXT="vorerst aber starten wir sofort mit Maximal-Leistung">
<icon BUILTIN="yes"/>
</node>
<node CREATED="1698523751770" ID="ID_903457471" MODIFIED="1698523767446" TEXT="(WorkForce wird sich selbst nach 2sec herunterregeln)"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698522492081" ID="ID_1777263362" MODIFIED="1698522515173" TEXT="terminateProcessing &#xd83e;&#xdc32; Gewalt!">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698522970735" ID="ID_728729079" MODIFIED="1698523703142" TEXT="die WorkForce kalt machen">
<icon BUILTIN="flag-yellow"/>
</node>
<node CREATED="1698522979070" ID="ID_27890829" MODIFIED="1698523707098" TEXT="der Destruktor wartet">
<icon BUILTIN="idea"/>
<node CREATED="1698523569872" ID="ID_158276586" MODIFIED="1698523584913" TEXT="die Selbstmord-Flag wurde gesetzt"/>
<node CREATED="1698523585621" ID="ID_896793694" MODIFIED="1698523606526" TEXT="Worker sterben sobald sie zur&#xfc;ckkommen"/>
<node CREATED="1698523607240" ID="ID_1186275785" MODIFIED="1698523619800" TEXT="Jedweder Kontrakt ist gebrochen">
<icon BUILTIN="clanbomber"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698522985869" ID="ID_319295239" MODIFIED="1698523708965" TEXT="danach die Queue leeren">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1698523062280" ID="ID_1393673316" MODIFIED="1698523095951" TEXT="BlockFlow besser nicht anfassen">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1698523098414" ID="ID_1417067453" MODIFIED="1698523106568" TEXT="eigentlich k&#xf6;nnte man den auch leeren"/>
<node CREATED="1698523107143" ID="ID_807106136" MODIFIED="1698523114759" TEXT="aber das bricht den Epoch-Contract"/>
<node CREATED="1698523115588" ID="ID_1469556071" MODIFIED="1698523126870" TEXT="es k&#xf6;nnte blockende external notifications geben"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1698523161438" ID="ID_88143705" MODIFIED="1698523176612" TEXT="noch nicht klar wie wir das handhaben">
<icon BUILTIN="bell"/>
</node>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1698532686214" ID="ID_272237675" MODIFIED="1698532696468" TEXT="Deadlines und Selbstregulierung">
<icon BUILTIN="flag-pink"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698532697859" ID="ID_1071571068" MODIFIED="1698532724472" TEXT="Deadlines in das System integrieren">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698532716488" ID="ID_337384722" MODIFIED="1698532910109" TEXT="in die Priority-Queue">
<arrowlink COLOR="#ef4776" DESTINATION="ID_136482882" ENDARROW="Default" ENDINCLINATION="69;-169;" ID="Arrow_ID_63115321" STARTARROW="None" STARTINCLINATION="-285;-30;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698532728431" ID="ID_233989928" MODIFIED="1698532974876" TEXT="mit Tick und Allokation integrieren">
<arrowlink COLOR="#f03375" DESTINATION="ID_1847975334" ENDARROW="Default" ENDINCLINATION="-449;34;" ID="Arrow_ID_1046093983" STARTARROW="None" STARTINCLINATION="222;-17;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698532793030" ID="ID_696019318" MODIFIED="1698533136478" TEXT="verbindliche Tasks erm&#xf6;glichen">
<arrowlink COLOR="#ee3a6b" DESTINATION="ID_1475771662" ENDARROW="Default" ENDINCLINATION="-1121;-88;" ID="Arrow_ID_211999245" STARTARROW="None" STARTINCLINATION="1410;120;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698532771174" ID="ID_840040649" MODIFIED="1698532780891" TEXT="Gesundheit / Notstand">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698533674384" ID="ID_1227874220" MODIFIED="1698534658603" TEXT="Scheduler-Emergency vorsehen">
<arrowlink COLOR="#ea5540" DESTINATION="ID_1515660165" ENDARROW="Default" ENDINCLINATION="-1517;105;" ID="Arrow_ID_1696922321" STARTARROW="None" STARTINCLINATION="912;-77;"/>
<linktarget COLOR="#d54a7e" DESTINATION="ID_1227874220" ENDARROW="Default" ENDINCLINATION="-1477;121;" ID="Arrow_ID_677451247" SOURCE="ID_748059800" STARTARROW="None" STARTINCLINATION="-536;-12;"/>
<linktarget COLOR="#9a5079" DESTINATION="ID_1227874220" ENDARROW="Default" ENDINCLINATION="133;12;" ID="Arrow_ID_967532278" SOURCE="ID_979357340" STARTARROW="None" STARTINCLINATION="241;-7;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1698078367419" HGAP="-36" ID="ID_1532750540" MODIFIED="1698079050460" TEXT="offene Fragen" VSHIFT="11">
<linktarget COLOR="#713d56" DESTINATION="ID_1532750540" ENDARROW="Default" ENDINCLINATION="-2344;353;" ID="Arrow_ID_1939324405" SOURCE="ID_161990356" STARTARROW="None" STARTINCLINATION="1495;112;"/>
@ -83322,7 +83547,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="idea"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697982818498" ID="ID_136482882" MODIFIED="1697982841387" TEXT="Deadline ber&#xfc;cksichtigen ">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697982818498" ID="ID_136482882" MODIFIED="1698532905413" TEXT="Deadline ber&#xfc;cksichtigen ">
<linktarget COLOR="#ef4776" DESTINATION="ID_136482882" ENDARROW="Default" ENDINCLINATION="69;-169;" ID="Arrow_ID_63115321" SOURCE="ID_337384722" STARTARROW="None" STARTINCLINATION="-285;-30;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1697982844409" ID="ID_1374530988" MODIFIED="1697982854041" TEXT="im Datenrecord mitf&#xfc;hren"/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1697982854605" ID="ID_651171432" MODIFIED="1697982875378" TEXT="Zusicherung: kein Zugriff auf verfallene Activities">
@ -83331,9 +83557,42 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1697982898279" ID="ID_1086820599" MODIFIED="1697982926481" TEXT="verfallene Activities d&#xfc;rfen wiederverwendet werden">
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1697982938058" ID="ID_1655832509" MODIFIED="1697983074142" TEXT="Problem: Deadlines f&#xfc;r non-timebound modes">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698542519485" ID="ID_768314841" MODIFIED="1698543099960" TEXT="Bereinigung in die normale Verarbeitung integrieren">
<linktarget COLOR="#7e4dc3" DESTINATION="ID_768314841" ENDARROW="Default" ENDINCLINATION="362;-65;" ID="Arrow_ID_464500099" SOURCE="ID_1705516567" STARTARROW="None" STARTINCLINATION="213;11;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1698542534903" ID="ID_1065770396" MODIFIED="1698542579305" TEXT="Achtung: nur unter Grooming-Token">
<icon BUILTIN="clanbomber"/>
</node>
<node CREATED="1698542606597" ID="ID_1206660275" MODIFIED="1698542904185" TEXT="Ungenauigkeit hier ist nicht wirklich relevant">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
zwar h&#228;tte man aus logischer Sicht gerne, da&#223; alle Informationsfunktionen stets den aktuell g&#252;ltigen Zustand reflektieren &#8212; aber das scheitert an der Natur einer Priority-Queue (welche nicht insgeheim <i>mutable</i>&#160;sein kann). Praktisch wirkt sich eine solche Diskrepanz aber fast nicht aus, denn das Ergebnis einer Informationsfunktion kann ohne Besitzt des Grooming-Tokens stets im n&#228;chsten Moment schon obsolet sein. Man mu&#223; nur aufpassen, da&#223; im Fall einer echten Mutation die Bereinigungs-Funktion vor der Entscheidungslogik aufgerufen wird
</p>
</body>
</html></richcontent>
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698542905269" ID="ID_271558649" MODIFIED="1698542913039" TEXT="Entscheidungslogik nochmal durchpr&#xfc;fen">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1697982938058" ID="ID_1655832509" MODIFIED="1698542495500" TEXT="Problem: Deadlines f&#xfc;r non-timebound modes">
<arrowlink COLOR="#fe6147" DESTINATION="ID_917322834" ENDARROW="Default" ENDINCLINATION="631;-14;" ID="Arrow_ID_1361409427" STARTARROW="None" STARTINCLINATION="953;54;"/>
<icon BUILTIN="hourglass"/>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1698542469775" ID="ID_1223768150" MODIFIED="1698542482889" TEXT="hierf&#xfc;r: verbindliche Tasks"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698533220909" ID="ID_1286321982" MODIFIED="1698533274744" TEXT="Flag und Steuerung f&#xfc;r &#xbb;verbindliche Activities&#xab;">
<linktarget COLOR="#f13e82" DESTINATION="ID_1286321982" ENDARROW="Default" ENDINCLINATION="107;492;" ID="Arrow_ID_1399415601" SOURCE="ID_326051657" STARTARROW="None" STARTINCLINATION="922;-57;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698533783922" ID="ID_1279644850" MODIFIED="1698533798213" TEXT="blockiert das Verwerfen nach Deadline">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698533800719" ID="ID_979357340" MODIFIED="1698533837777" TEXT="wird dann vom Tick/DutyCycle erkannt">
<arrowlink COLOR="#9a5079" DESTINATION="ID_1227874220" ENDARROW="Default" ENDINCLINATION="133;12;" ID="Arrow_ID_967532278" STARTARROW="None" STARTINCLINATION="241;-7;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
@ -88296,15 +88555,19 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697473158929" ID="ID_505069585" MODIFIED="1697493162215" TEXT="Aufgaben">
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1697736343993" ID="ID_1891808134" MODIFIED="1697736494112" TEXT="das Scheduler-API abdecken">
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1697736343993" ID="ID_1891808134" MODIFIED="1698521838378" TEXT="das Scheduler-API abdecken">
<arrowlink COLOR="#ff1924" DESTINATION="ID_996573918" ENDARROW="Default" ENDINCLINATION="-817;60;" ID="Arrow_ID_226641198" STARTARROW="None" STARTINCLINATION="-848;-40;"/>
<icon BUILTIN="hourglass"/>
<icon BUILTIN="pencil"/>
<node CREATED="1698521839789" ID="ID_1664026043" MODIFIED="1698521848117" TEXT="Lebenszyklus: start / stop"/>
</node>
<node COLOR="#338800" CREATED="1697484506891" ID="ID_1292738036" MODIFIED="1698448216625" TEXT="den kompletten Work-Funktor durchspielen">
<linktarget COLOR="#56a5a9" DESTINATION="ID_1292738036" ENDARROW="Default" ENDINCLINATION="286;-465;" ID="Arrow_ID_367470516" SOURCE="ID_288711039" STARTARROW="None" STARTINCLINATION="-752;0;"/>
<icon BUILTIN="button_ok"/>
<node CREATED="1698243387222" ID="ID_1151484757" MODIFIED="1698243397453" TEXT="und zwar direkten Aufruf, ohne WorkForce"/>
<node CREATED="1698243399946" ID="ID_525069730" MODIFIED="1698243412341" TEXT="es kann zu Sleeps kommen"/>
<node CREATED="1698243426549" ID="ID_1975979569" MODIFIED="1698448212804" TEXT="das bedeutet: Zeitmessung">
<node CREATED="1698243399946" ID="ID_525069730" MODIFIED="1698243412341" TEXT="es kann zu Sleeps kommen">
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1698243426549" FOLDED="true" ID="ID_1975979569" MODIFIED="1698448212804" TEXT="das bedeutet: Zeitmessung">
<icon BUILTIN="clock"/>
<node CREATED="1698269582160" ID="ID_211702790" MODIFIED="1698269611010" TEXT="und Pr&#xfc;fen unscharfer Zeitabst&#xe4;nde">
<icon BUILTIN="messagebox_warning"/>
@ -88357,10 +88620,12 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node CREATED="1698245511656" ID="ID_1594716553" MODIFIED="1698245548777" TEXT="Scaffolding">
<node COLOR="#435e98" CREATED="1698245511656" ID="ID_1594716553" MODIFIED="1698521746415" TEXT="Scaffolding">
<font NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="list"/>
<node CREATED="1698245550915" ID="ID_1897821225" MODIFIED="1698245557078" TEXT="verwende ActivityDetector"/>
<node CREATED="1698245558169" ID="ID_1427917719" MODIFIED="1698245570820" TEXT="aber Problem: an die aktuelle Aufruzeit kommen"/>
<node COLOR="#5b280f" CREATED="1698245571408" ID="ID_1935211976" MODIFIED="1698245821927" TEXT="Activity::TICK und den execution-Ctx riggen">
<node COLOR="#5b280f" CREATED="1698245571408" FOLDED="true" ID="ID_1935211976" MODIFIED="1698245821927" TEXT="Activity::TICK und den execution-Ctx riggen">
<icon BUILTIN="button_cancel"/>
<node CREATED="1698245823278" ID="ID_1225266983" MODIFIED="1698245858822" TEXT="geht nicht ... diese Hintert&#xfc;r ist ZU">
<icon BUILTIN="stop-sign"/>
@ -88369,12 +88634,12 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="info"/>
</node>
</node>
<node COLOR="#338800" CREATED="1698246249997" ID="ID_221908219" MODIFIED="1698269566601" TEXT="mu&#xdf; mir die now-Zeit in ActivityProbe speichern">
<node COLOR="#338800" CREATED="1698246249997" FOLDED="true" ID="ID_221908219" MODIFIED="1698269566601" TEXT="mu&#xdf; mir die now-Zeit in ActivityProbe speichern">
<icon BUILTIN="button_ok"/>
<node CREATED="1698246275186" ID="ID_389803917" MODIFIED="1698246286348" TEXT="bei jedem Aufruf im Objekt speichern"/>
<node CREATED="1698246286912" ID="ID_1611070007" MODIFIED="1698246292046" TEXT="Zugriffs-Funktion schaffen"/>
</node>
<node COLOR="#338800" CREATED="1698273941216" ID="ID_206667469" MODIFIED="1698284642804" TEXT="Kurznotation entwickeln zum Formulieren der Testf&#xe4;lle">
<node COLOR="#338800" CREATED="1698273941216" FOLDED="true" ID="ID_206667469" MODIFIED="1698284642804" TEXT="Kurznotation entwickeln zum Formulieren der Testf&#xe4;lle">
<icon BUILTIN="button_ok"/>
<node CREATED="1698273959952" ID="ID_1633573295" MODIFIED="1698273977867" TEXT="lokale Abk&#xfc;rzungs-&#x3bb;"/>
<node CREATED="1698273979493" ID="ID_1574422283" MODIFIED="1698273987600" TEXT="Zeitmessung fest einbauen"/>
@ -88741,6 +89006,11 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node CREATED="1698521856803" ID="ID_1548722737" MODIFIED="1698521890994" TEXT="verify_StartStop">
<node CREATED="1698521924261" ID="ID_1936048598" MODIFIED="1698521938620" TEXT="explizit in Gang setzen"/>
<node CREATED="1698521939608" ID="ID_501619176" MODIFIED="1698521945915" TEXT="sehen da&#xdf; er &#xbb;l&#xe4;uft&#xab;"/>
<node CREATED="1698521946743" ID="ID_783620032" MODIFIED="1698521949779" TEXT="wieder anhalten"/>
</node>
<node COLOR="#338800" CREATED="1698247388556" ID="ID_1402046356" MODIFIED="1698448243571" TEXT="invokeWorkFunction">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1698247394051" ID="ID_198829622" MODIFIED="1698247420009" TEXT="kann einfachen Aufruf einer vorher eingespielten Activity belegen">
@ -92186,6 +92456,202 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="yes"/>
</node>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1698526315968" ID="ID_394986223" MODIFIED="1698526341356" TEXT="Verbindliche Aktivit&#xe4;ten">
<icon BUILTIN="messagebox_warning"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1698526344156" ID="ID_1605243708" MODIFIED="1698526373772" TEXT="noch ein ungekl&#xe4;rtes Problem &#x2014; sieht nach innerem Widerspruch aus">
<icon BUILTIN="clanbomber"/>
</node>
<node CREATED="1698526392894" ID="ID_1798534041" MODIFIED="1698526620878" TEXT="der Scheduler k&#xf6;nnte ohne Deadline leben, aber der BlockFlow erzwingt sie">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
F&#252;r die Implementierung des Schedulers sind Deadlines technisch irrelevant &#8212; deshalb habe ich aktuell auch die ganze Implementierung gecodet, und noch keine Deadline-Behandlung eingebaut. Aber sowohl logisch, als auch im Hinblick auf die Allokationen <b>mu&#223;</b>&#160;jede Activity eine Deadline haben. Eine Activity ohne Deadline w&#228;re ultimativ verbindlich: <i>irgendwann nach </i>ihrem Startzeitpunkt <i>mu&#223; sie aktiviert werden, </i>und jede sp&#228;tere Activity ist durch sie verdeckt
</p>
</body>
</html>
</richcontent>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698533069058" ID="ID_1475771662" MODIFIED="1698533129903" TEXT="klares Trennkriterium einf&#xfc;hren">
<linktarget COLOR="#ee3a6b" DESTINATION="ID_1475771662" ENDARROW="Default" ENDINCLINATION="-1121;-88;" ID="Arrow_ID_211999245" SOURCE="ID_696019318" STARTARROW="None" STARTINCLINATION="1410;120;"/>
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698533152440" ID="ID_326051657" MODIFIED="1698533633384" TEXT="Flag f&#xfc;r verbindlichen Task in den Scheduler einbauen">
<arrowlink COLOR="#f13e82" DESTINATION="ID_1286321982" ENDARROW="Default" ENDINCLINATION="107;492;" ID="Arrow_ID_1399415601" STARTARROW="None" STARTINCLINATION="922;-57;"/>
<linktarget COLOR="#df3563" DESTINATION="ID_326051657" ENDARROW="Default" ENDINCLINATION="482;26;" ID="Arrow_ID_550869434" SOURCE="ID_1704365524" STARTARROW="None" STARTINCLINATION="423;25;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1698526632870" ID="ID_1680559422" MODIFIED="1698526704177">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
Problem: wenn R&#252;ckstau im Scheduler entsteht,
</p>
<p>
wird jede Deadline irgendwann &#252;berfahren
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="broken-line"/>
<node CREATED="1698526724569" HGAP="36" ID="ID_68181204" MODIFIED="1698528287374" TEXT="und dann..." VSHIFT="30">
<icon BUILTIN="smiley-oh"/>
<node CREATED="1698526731373" ID="ID_78222945" MODIFIED="1698526743146" TEXT="hat ein finaler Render fehlende Frames"/>
<node CREATED="1698526743879" ID="ID_136373710" MODIFIED="1698526753121" TEXT="kann eine Dependency-Kette geblockt werden"/>
<node CREATED="1698526753997" ID="ID_810112487" MODIFIED="1698526781789" TEXT="rei&#xdf;t die Sequenz der Scheduler-Ticks ab"/>
</node>
<node CREATED="1698528278314" HGAP="56" ID="ID_906006078" MODIFIED="1698528284150" TEXT="Dilemma" VSHIFT="13">
<node CREATED="1698528304615" ID="ID_402115905" MODIFIED="1698528981338" TEXT="Epochen k&#xf6;nnen nicht beliebig lange blockiert sein">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
...es gibt zwar einen Block-Mechanismus (das Epoch-Gate), doch damit l&#228;&#223;t man den Block-Pool anwachsen und die lineare Suche durch die Bl&#246;cke macht sich bald bemerkbar
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1698528350522" ID="ID_1884380820" MODIFIED="1698528623316" TEXT="Epochen k&#xf6;nnen nicht beliebig gro&#xdf; werden">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
...weil dann der &#220;berlauf-Mechanismus zu weit in die Zukunft ausgreift, und sich die Steuerung in absehbarer Zeit<i>&#160;nicht mehr f&#228;ngt.</i>
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1698528368302" ID="ID_516251987" MODIFIED="1698528683619" TEXT="bei normaler Gr&#xf6;&#xdf;e sind keine beliebig weiten Zeitschritte m&#xf6;glich">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Daher ist es nicht m&#246;glich, eben sehr gro&#223;e/lange Tasks vorzuplanen; man erzeugt eine Flut leerer Bl&#246;cke dazwischen, und die Suchzeiten degenerieren
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1698528414600" ID="ID_842501295" MODIFIED="1698528848581" TEXT="darf nach &#xfc;berschrittener Deadline die Activity nicht (mehr) dereferenzieren">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Damit scheiden die naheliegenden <i>Reparatur-Ans&#228;tze</i>&#160;weitgehend aus: es ist nicht m&#246;glich, eine &#8222;&#252;berfahrene&#8220; Activity <i>in die Zukunft </i>zu kopieren, denn wenn die Deadline verstrichen ist, kann sie auch bereits verworfen worden sein, und es ist nicht mehr feststellbar, um was es sich handelte
</p>
</body>
</html>
</richcontent>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1698529013384" ID="ID_1792474649" MODIFIED="1698529614442" STYLE="bubble" TEXT="&#x27f9; nur Abbruch m&#xf6;glich">
<edge COLOR="#cd5252"/>
<node CREATED="1698529046859" ID="ID_919383454" MODIFIED="1698529593507" STYLE="fork" TEXT="die gew&#xe4;hlte Scheduler-Struktur hat ihre Grenzen"/>
<node CREATED="1698529093245" ID="ID_553293254" MODIFIED="1698529593507" STYLE="fork" TEXT="man kann zwar puffern und abregulieren"/>
<node CREATED="1698529118154" ID="ID_1695541151" MODIFIED="1698529593507" STYLE="fork" TEXT="mu&#xdf; dann aber explizit abbrechen"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1698529182459" HGAP="2" ID="ID_1279861540" MODIFIED="1698529626166" STYLE="fork" TEXT="dieser Grenzfall liegt gar nicht so fern" VSHIFT="31">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1698529431864" ID="ID_18246325" MODIFIED="1698529633206" TEXT="geblocktes Netzwerk-IO"/>
<node CREATED="1698529210006" ID="ID_848256978" MODIFIED="1698529657110" TEXT="30 Sekunden pro Frame"/>
<node CREATED="1698529456173" ID="ID_876230665" MODIFIED="1698529593507" TEXT="System anderweitig &#xfc;berlastet &#x27f9; Tick kommt nicht zum Zug"/>
</node>
</node>
</node>
</node>
<node CREATED="1698529789384" ID="ID_1112168192" MODIFIED="1698529802617" TEXT="Begrenzung und &#xdc;berwachung">
<node CREATED="1698529808478" ID="ID_199837288" MODIFIED="1698529823647" TEXT="die Gesundheit mu&#xdf; &#xfc;berwacht werden">
<node CREATED="1698529824596" ID="ID_763081932" MODIFIED="1698529829108" TEXT="von innen und von au&#xdf;en">
<node CREATED="1698530385776" ID="ID_365804773" MODIFIED="1698530398452" TEXT="Innen-&#xdc;berwachung: der Tick">
<node CREATED="1698533322431" ID="ID_1153107499" MODIFIED="1698534741599">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
der Tick selber ist eine <b>verbindliche Aktivit&#228;t</b>
</p>
</body>
</html>
</richcontent>
<linktarget COLOR="#fd2f46" DESTINATION="ID_1153107499" ENDARROW="Default" ENDINCLINATION="524;-25;" ID="Arrow_ID_251741761" SOURCE="ID_1189633297" STARTARROW="None" STARTINCLINATION="420;464;"/>
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698533344228" ID="ID_1704365524" MODIFIED="1698533633384" TEXT="der Tick aktualisiert jeweils den Queue-Head">
<arrowlink COLOR="#df3563" DESTINATION="ID_326051657" ENDARROW="Default" ENDINCLINATION="482;26;" ID="Arrow_ID_550869434" STARTARROW="None" STARTINCLINATION="423;25;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698533408036" ID="ID_748059800" MODIFIED="1698533723760" TEXT="wenn eine verbindliche Aktivit&#xe4;t &#xfc;berfahren wird &#xd83e;&#xdc32; Scheduler-Emergency">
<arrowlink COLOR="#b44670" DESTINATION="ID_269636711" ENDARROW="Default" ENDINCLINATION="204;-1082;" ID="Arrow_ID_1625681464" STARTARROW="None" STARTINCLINATION="-1259;48;"/>
<arrowlink COLOR="#d54a7e" DESTINATION="ID_1227874220" ENDARROW="Default" ENDINCLINATION="-1477;121;" ID="Arrow_ID_677451247" STARTARROW="None" STARTINCLINATION="-536;-12;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node CREATED="1698530399254" ID="ID_1046746147" MODIFIED="1698530408833" TEXT="Au&#xdf;en-&#xdc;berwachung...">
<node CREATED="1698530409796" ID="ID_324754876" MODIFIED="1698530428896" TEXT="k&#xf6;nnte ein sanity-Check beim Zugriff sein"/>
<node CREATED="1698530429514" ID="ID_1167241428" MODIFIED="1698530435977" TEXT="oder ein W&#xe4;chter-Thread"/>
</node>
</node>
<node CREATED="1698529832978" ID="ID_1789989240" MODIFIED="1698529853331" TEXT="Selbst-Diagnose per Warnschwelle notwendig">
<node CREATED="1698530454718" ID="ID_1982008339" MODIFIED="1698530612783" TEXT="mu&#xdf; vor dem BlockFlow-Clean-up sitzen">
<arrowlink COLOR="#ed3471" DESTINATION="ID_355476974" ENDARROW="Default" ENDINCLINATION="-616;43;" ID="Arrow_ID_729257748" STARTARROW="None" STARTINCLINATION="689;49;"/>
</node>
</node>
</node>
<node CREATED="1698529860655" ID="ID_315208147" MODIFIED="1698529868790" TEXT="es mu&#xdf; einen sauberen Abbruch geben">
<node CREATED="1698529876100" ID="ID_1032670149" MODIFIED="1698530090626" TEXT="pausieren der Render-Prozesse">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
sollte automatisch passieren, wenn die internen Gesundheits-Checks scheitern
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1698529893418" ID="ID_945666348" MODIFIED="1698529916172" TEXT="gestartete Berechnungen laufen weiter"/>
<node CREATED="1698529917111" ID="ID_138084659" MODIFIED="1698529933793" TEXT="das &#xfc;brige System mu&#xdf; gesund bleiben"/>
<node CREATED="1698529943153" ID="ID_1379758104" MODIFIED="1698530377336" TEXT="Notfall-Shutdown wird dann problematisch">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
...wenn wir noch einen Worker-Pool haben, der mit langlaufenden berechnungen geblockt ist, dann wird jeder regul&#228;re emergency-Shutdown im Destruktor h&#228;ngen bleiben.Wenn es erst mal so weit gekommen ist, kann man nicht einmal mehr den User richtig benachrichtigen; ein hartes <font face="Monospaced">exit()</font>&#160; dagegen w&#252;rde die bereits geleistete Arbeit einfach verwerfen.
</p>
</body>
</html>
</richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698529979672" ID="ID_1042828147" MODIFIED="1698529998709" TEXT="Alternative bieten">
<icon BUILTIN="yes"/>
<node CREATED="1698529985397" ID="ID_582805818" MODIFIED="1698535734795" TEXT="einen Batch-Prozessor">
<arrowlink COLOR="#632988" DESTINATION="ID_1722365863" ENDARROW="Default" ENDINCLINATION="-523;-416;" ID="Arrow_ID_65227993" STARTARROW="None" STARTINCLINATION="-598;65;"/>
<icon BUILTIN="idea"/>
</node>
<node CREATED="1698530010130" ID="ID_1644937663" MODIFIED="1698530021855" TEXT="sollte m&#xf6;glichst das gleiche Ausf&#xfc;hrungs-Framework verwenden"/>
</node>
</node>
<node CREATED="1698097270027" ID="ID_1129105536" MODIFIED="1698097290884" TEXT="Timing-Genauigkeit">
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1698097298079" ID="ID_578937577" MODIFIED="1698097305903" TEXT="was brauchen wir wirklich?">
@ -92437,6 +92903,73 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<arrowlink COLOR="#71457a" DESTINATION="ID_195997630" ENDARROW="Default" ENDINCLINATION="-1608;190;" ID="Arrow_ID_345281595" STARTARROW="None" STARTINCLINATION="-385;28;"/>
<icon BUILTIN="hourglass"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1698530812711" HGAP="12" ID="ID_269636711" MODIFIED="1698541315516" TEXT="Scheduler-Emergency" VSHIFT="20">
<linktarget COLOR="#ff2f19" DESTINATION="ID_269636711" ENDARROW="Default" ENDINCLINATION="-577;-1106;" ID="Arrow_ID_1849442376" SOURCE="ID_355476974" STARTARROW="None" STARTINCLINATION="173;762;"/>
<linktarget COLOR="#b44670" DESTINATION="ID_269636711" ENDARROW="Default" ENDINCLINATION="204;-1082;" ID="Arrow_ID_1625681464" SOURCE="ID_748059800" STARTARROW="None" STARTINCLINATION="-1259;48;"/>
<icon BUILTIN="flag-pink"/>
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1698530968938" ID="ID_187393453" MODIFIED="1698531103087" STYLE="bubble">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p style="text-align: center">
Der Scheduler arbeitet nur in einem begrenzten Bereich
</p>
<p style="text-align: center">
Dieser kann durch allt&#228;gliche Umst&#228;nde verletzt werden
</p>
<p style="text-align: center">
Dann ist ein spezielle Notzustand zu aktivieren
</p>
</body>
</html>
</richcontent>
<edge COLOR="#930246"/>
<icon BUILTIN="info"/>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1698531755989" ID="ID_1664977737" MODIFIED="1698531803578" TEXT="Auspr&#xe4;gung des Notzustands">
<icon BUILTIN="help"/>
<node CREATED="1698531769111" ID="ID_935202336" MODIFIED="1698531782849" TEXT="auf Engine / Play-Prozess-Level">
<node CREATED="1698531881781" ID="ID_297033617" MODIFIED="1698531892074" TEXT="alle Play-Prozesse auf Pause stellen"/>
</node>
<node CREATED="1698531783445" ID="ID_1028561125" MODIFIED="1698531790816" TEXT="auf Scheduler-Level">
<node CREATED="1698531847100" ID="ID_67188486" MODIFIED="1698531854879" TEXT="keine de-Allokationen mehr"/>
<node CREATED="1698531857619" ID="ID_1423744776" MODIFIED="1698531863140" TEXT="alle Worker terminieren"/>
<node CREATED="1698531875525" ID="ID_1843097564" MODIFIED="1698531879431" TEXT="Tick nicht erneuern"/>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1698531826447" ID="ID_1031213188" MODIFIED="1698531840094" TEXT="Mechanismus zum Wiederanlauf schaffen">
<icon BUILTIN="hourglass"/>
<node CREATED="1698532052993" ID="ID_503858341" MODIFIED="1698532312084" TEXT="Problem: Berechnunsstand feststellen">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
...der gesamte Entwurf bisher beruht auf Ereignis-Verkn&#252;pfung und sieht keine generische Erfassung aller tats&#228;chlich berechneten Schritte vor. Wenn also die Scheduler-Emergency ausgel&#246;st wird, ist ein zuf&#228;llig verteiltes Muster an Einzel-Jobs abgeschlossen, und der Rest fehlt. Wollte man hier einen generischen Ansatz f&#252;r das Wiederanlaufen schaffen, so m&#252;&#223;te man alle Berechnungsprozesse unter eine einzige Abstraktion subsummieren k&#246;nnen. Das halte ich f&#252;r gef&#228;hrlich...
</p>
</body>
</html>
</richcontent>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698532335022" ID="ID_849438801" MODIFIED="1698532356066" TEXT="Konsequenz &#x27f9; Player-Clients brauchen Recovery-Mechanismus">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1698532360192" ID="ID_357614396" MODIFIED="1698532377398" TEXT="gutm&#xfc;tiger Fall">
<icon BUILTIN="idea"/>
<node CREATED="1698532382547" ID="ID_219475859" MODIFIED="1698532412159" TEXT="man pausiert (Play-Prozesse und Scheduler)"/>
<node CREATED="1698532422552" ID="ID_1643252721" MODIFIED="1698532434002" TEXT="nachdem die aktuellen Worker terminiert sind..."/>
<node CREATED="1698532439904" ID="ID_56439604" MODIFIED="1698532451840" TEXT="...gibt es einen geeigneten Trigger..."/>
<node CREATED="1698532485911" ID="ID_1935981451" MODIFIED="1698532499118" TEXT="man entnimmt und aktualisiert die Zeitachse"/>
<node CREATED="1698532456848" ID="ID_559992837" MODIFIED="1698532465100" TEXT="und die WorkForce wird erneut hochgefahren"/>
<node CREATED="1698532511132" ID="ID_1488024271" MODIFIED="1698532528375" TEXT="(hoffentlich) l&#xe4;uft dann die Berechnung nahtlos weiter">
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
</node>
</node>
</node>
<node CREATED="1697933502816" ID="ID_1155890066" MODIFIED="1697933560271" TEXT="Laststeuerung">
<linktarget COLOR="#7d55a6" DESTINATION="ID_1155890066" ENDARROW="Default" ENDINCLINATION="-78;310;" ID="Arrow_ID_1724375377" SOURCE="ID_338601496" STARTARROW="None" STARTINCLINATION="-372;-24;"/>
@ -92526,6 +93059,34 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1698535401066" ID="ID_1722365863" MODIFIED="1698535734795" TEXT="Batch-Prozessor">
<linktarget COLOR="#632988" DESTINATION="ID_1722365863" ENDARROW="Default" ENDINCLINATION="-523;-416;" ID="Arrow_ID_65227993" SOURCE="ID_582805818" STARTARROW="None" STARTINCLINATION="-598;65;"/>
<icon BUILTIN="stop"/>
<node CREATED="1698535499350" ID="ID_291544921" MODIFIED="1698535510293" TEXT="Komplementiert den Scheduler">
<icon BUILTIN="info"/>
<node CREATED="1698535547327" ID="ID_1921664973" MODIFIED="1698535562301" TEXT="deckt die Randbereiche im Betriebsmuster ab">
<node CREATED="1698535641170" ID="ID_623035212" MODIFIED="1698535714220" TEXT="soll als Plan-B f&#xfc;r Grenzf&#xe4;lle dienen">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Beispiel: ein &#187;final Render&#171; bei dem pro Frame mehr als 30 Sekunden Rechenzeit notwendig sind; dies w&#252;rde die Auslegung des Schedulers sprengen
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1698535623469" ID="ID_1256815125" MODIFIED="1698535635467" TEXT="erm&#xf6;glicht Performance-Optimierung des Schedulers"/>
</node>
<node CREATED="1698535563497" ID="ID_973443699" MODIFIED="1698535576327" TEXT="verwendet die gleiche Ausf&#xfc;hrugs-Technologie wie der Scheduler">
<node CREATED="1698535579258" ID="ID_307388593" MODIFIED="1698535584281" TEXT="Activity-Language"/>
<node CREATED="1698535603810" ID="ID_884782032" MODIFIED="1698535611944" TEXT="Render-Jobs"/>
<node CREATED="1698535590417" ID="ID_813958811" MODIFIED="1698535593292" TEXT="WorkForce"/>
</node>
</node>
</node>
</node>
<node CREATED="1512923629577" ID="ID_617347424" MODIFIED="1557498707237" TEXT="Backend">
<node CREATED="1680565608115" ID="ID_1114884704" MODIFIED="1680565612050" TEXT="Hilfsmittel">