Scheduler: start and shutdown implemented and demonstrated in test
- An important step towards a complete »Scheduler Service« - Correct timing pattern could be verified in detail by tracing - Spurred some further concept and design work regarding Load-control
This commit is contained in:
parent
8505059476
commit
22b4a9e4b2
6 changed files with 438 additions and 205 deletions
|
|
@ -21,35 +21,29 @@
|
|||
* *****************************************************/
|
||||
|
||||
/** @file activity-lang.cpp
|
||||
** Implementation details of the scheduler activity language framework.
|
||||
**
|
||||
** @todo WIP-WIP-WIP 8/2023 »Playback Vertical Slice«
|
||||
**
|
||||
** Supporting implementation for the scheduler activity language framework.
|
||||
** @note most of the language processing is defined as inline functions
|
||||
** and uses fixed-size data storage in a dedicated custom allocator.
|
||||
** Timing measurements confirmed the benefits, reducing invocations
|
||||
** from ~50µs to <5µs in optimised mode, and this indeed matters,
|
||||
** as the scheduler can be considered performance sensitive code.
|
||||
*/
|
||||
|
||||
|
||||
#include "vault/gear/activity-lang.hpp"
|
||||
//#include "lib/symbol.hpp"
|
||||
//#include "include/logging.h"
|
||||
#include "lib/format-obj.hpp"
|
||||
|
||||
#include <string>
|
||||
|
||||
using std::string;
|
||||
//using util::isnil;
|
||||
using lib::time::Time;
|
||||
using lib::time::TimeValue;
|
||||
|
||||
|
||||
namespace vault{
|
||||
namespace gear {
|
||||
|
||||
namespace { // internal details
|
||||
|
||||
} // internal details
|
||||
|
||||
namespace activity {
|
||||
|
||||
Hook::~Hook() { } // emit VTable here...
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -130,9 +124,4 @@ namespace gear {
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
|
||||
}} // namespace vault::gear
|
||||
|
|
|
|||
|
|
@ -158,6 +158,13 @@ namespace gear {
|
|||
/////////////////////////////////////////////////////////////////////////////OOO build integrated load state
|
||||
}
|
||||
|
||||
/** statistics update on scaling down the WorkForce */
|
||||
void
|
||||
markWorkerExit()
|
||||
{
|
||||
///////do something deeply moving
|
||||
}
|
||||
|
||||
/**
|
||||
* did we already tend for the indicated next relevant head time?
|
||||
* @note const and non-grooming
|
||||
|
|
|
|||
|
|
@ -1,68 +0,0 @@
|
|||
/*
|
||||
Scheduler - coordination of render activities under timing and dependency constraints
|
||||
|
||||
Copyright (C) Lumiera.org
|
||||
2023, Hermann Vosseler <Ichthyostega@web.de>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
* *****************************************************/
|
||||
|
||||
/** @file scheduler.cpp
|
||||
** Implementation of messaging, dispatch and prioritisation of render activities.
|
||||
** The _scheduling_ functionality is assembled from low-level operational building blocks.
|
||||
**
|
||||
** @note as of X/2023 this is complete bs
|
||||
** @todo WIP ///////////////////////TICKET #
|
||||
**
|
||||
** @see ////TODO_test usage example
|
||||
** @see scheduler.cpp implementation
|
||||
**
|
||||
** @todo WIP-WIP-WIP 6/2023 »Playback Vertical Slice«
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
#include "vault/gear/scheduler.hpp"
|
||||
//#include "lib/symbol.hpp"
|
||||
//#include "include/logging.h"
|
||||
|
||||
//#include <string>
|
||||
|
||||
//using std::string;
|
||||
//using util::isnil;
|
||||
|
||||
|
||||
namespace vault{
|
||||
namespace gear {
|
||||
|
||||
namespace { // internal details
|
||||
|
||||
} // internal details
|
||||
|
||||
namespace activity {
|
||||
|
||||
Hook::~Hook() { } // emit VTable here...
|
||||
}
|
||||
|
||||
// NA::~NA() { }
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
|
||||
}} // namespace vault::gear
|
||||
|
|
@ -186,22 +186,28 @@ namespace gear {
|
|||
}
|
||||
|
||||
/**
|
||||
* Spark the engine self-regulation cycle and power up WorkForce
|
||||
* Spark the engine self-regulation cycle and power up WorkForce.
|
||||
* @note set off automatically when [put to use](\ref #seedCalcStream);
|
||||
* while active, the [duty-cycle](\ref #handleDutyCycle) retains
|
||||
* itself, albeit bound to disengage when falling empty.
|
||||
*/
|
||||
void
|
||||
ignite()
|
||||
{
|
||||
TRACE (engine, "Ignite Scheduler Dispatch.");
|
||||
handleDutyCycle (RealClock::now());
|
||||
workForce_.activate();
|
||||
if (not empty())
|
||||
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
|
||||
* @warning Actually running Activities can not be aborted, but anything
|
||||
* not yet scheduled will be discarded, irrespective of dependencies.
|
||||
* @remark should never need to call this in regular operation,
|
||||
* since an empty scheduler disengages automatically.
|
||||
*/
|
||||
void
|
||||
terminateProcessing()
|
||||
|
|
@ -251,12 +257,7 @@ namespace gear {
|
|||
|
||||
private:
|
||||
void handleDutyCycle (Time now);
|
||||
|
||||
void
|
||||
handleWorkerTermination (bool isFailure)
|
||||
{
|
||||
UNIMPLEMENTED("die harder");
|
||||
}
|
||||
void handleWorkerTermination (bool isFailure);
|
||||
|
||||
void triggerEmergency();
|
||||
|
||||
|
|
@ -529,6 +530,19 @@ namespace gear {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback invoked whenever a worker-thread is about to exit
|
||||
* @param isFailuere if the exit was caused by uncaught exception
|
||||
*/
|
||||
inline void
|
||||
Scheduler::handleWorkerTermination (bool isFailure)
|
||||
{
|
||||
if (isFailure)
|
||||
triggerEmergency();
|
||||
else
|
||||
loadControl_.markWorkerExit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Trip the emergency brake and unwind processing while retaining all state.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -77,6 +77,7 @@ namespace test {
|
|||
{
|
||||
simpleUsage();
|
||||
verify_StartStop();
|
||||
verify_Disengage();
|
||||
invokeWorkFunction();
|
||||
walkingDeadline();
|
||||
}
|
||||
|
|
@ -95,8 +96,8 @@ namespace test {
|
|||
|
||||
|
||||
|
||||
/** @test TODO get the scheduler into running state
|
||||
* @todo WIP 10/23 ✔ define ⟶ 🔁 implement
|
||||
/** @test get the scheduler into running state
|
||||
* @todo WIP 10/23 ✔ define ⟶ ✔ implement
|
||||
*/
|
||||
void
|
||||
verify_StartStop()
|
||||
|
|
@ -105,12 +106,61 @@ namespace test {
|
|||
EngineObserver watch;
|
||||
Scheduler scheduler{bFlow, watch};
|
||||
CHECK (isnil (scheduler));
|
||||
|
||||
Activity dummy{uint64_t(123), uint64_t(456)};
|
||||
auto postIt = [&] { auto& schedCtx = Scheduler::ExecutionCtx::from(scheduler);
|
||||
schedCtx.post (RealClock::now()+t200us, &dummy, schedCtx);
|
||||
};
|
||||
|
||||
scheduler.ignite();
|
||||
CHECK (isnil (scheduler)); // no start without any post()
|
||||
|
||||
postIt();
|
||||
scheduler.ignite();
|
||||
CHECK (not isnil (scheduler));
|
||||
|
||||
scheduler.terminateProcessing();
|
||||
CHECK (isnil (scheduler));
|
||||
|
||||
postIt();
|
||||
postIt();
|
||||
scheduler.ignite();
|
||||
CHECK (not isnil (scheduler));
|
||||
//... and just walk away => scheduler unwinds cleanly from destructor
|
||||
}// Note: BlockFlow and WorkForce unwinding is covered in dedicated tests
|
||||
|
||||
|
||||
|
||||
/** @test TODO verify the scheduler processes and winds down automatically
|
||||
* when falling empty.
|
||||
* @todo WIP 10/23 ✔ define ⟶ 🔁 implement
|
||||
*/
|
||||
void
|
||||
verify_Disengage()
|
||||
{
|
||||
BlockFlowAlloc bFlow;
|
||||
EngineObserver watch;
|
||||
Scheduler scheduler{bFlow, watch};
|
||||
CHECK (isnil (scheduler));
|
||||
|
||||
Activity dummy{uint64_t(123), uint64_t(456)};
|
||||
auto postIt = [&] { auto& schedCtx = Scheduler::ExecutionCtx::from(scheduler);
|
||||
schedCtx.post (RealClock::now()+t200us, &dummy, schedCtx);
|
||||
};
|
||||
|
||||
UNIMPLEMENTED("disengage");
|
||||
scheduler.ignite();
|
||||
CHECK (isnil (scheduler));
|
||||
|
||||
postIt();
|
||||
scheduler.ignite();
|
||||
CHECK (not isnil (scheduler));
|
||||
SHOW_EXPR(_raw(RealClock::now()))
|
||||
SHOW_EXPR(_raw(scheduler.layer1_.headTime()))
|
||||
|
||||
scheduler.terminateProcessing();
|
||||
CHECK (isnil (scheduler));
|
||||
SHOW_EXPR(_raw(RealClock::now()))
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -80928,7 +80928,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#f72a8f" DESTINATION="ID_424129996" ENDARROW="Default" ENDINCLINATION="-365;-20;" ID="Arrow_ID_1444084792" STARTARROW="None" STARTINCLINATION="-53;219;"/>
|
||||
<arrowlink COLOR="#f72a8f" DESTINATION="ID_424129996" ENDARROW="Default" ENDINCLINATION="-547;-50;" ID="Arrow_ID_1444084792" STARTARROW="None" STARTINCLINATION="-53;219;"/>
|
||||
<linktarget COLOR="#a35866" DESTINATION="ID_88816908" ENDARROW="Default" ENDINCLINATION="-7;123;" ID="Arrow_ID_1622612414" SOURCE="ID_145651869" STARTARROW="None" STARTINCLINATION="487;21;"/>
|
||||
<icon BUILTIN="clanbomber"/>
|
||||
</node>
|
||||
|
|
@ -82380,7 +82380,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1697758577471" ID="ID_805214343" MODIFIED="1697758585886" TEXT="dagegen BlockFlow ist eine externe Komponente"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697844012851" ID="ID_1020998473" MODIFIED="1697844595733" TEXT="Execution-Context tatsächlich bereitstellen">
|
||||
<node COLOR="#435e98" CREATED="1697844012851" FOLDED="true" ID="ID_1020998473" MODIFIED="1698591450293" TEXT="Execution-Context tatsächlich bereitstellen">
|
||||
<linktarget COLOR="#e6ffa8" DESTINATION="ID_1020998473" ENDARROW="Default" ENDINCLINATION="-1456;-96;" ID="Arrow_ID_1485027520" SOURCE="ID_1906823317" STARTARROW="None" STARTINCLINATION="-811;38;"/>
|
||||
<icon BUILTIN="forward"/>
|
||||
<node CREATED="1697844618383" ID="ID_988917685" MODIFIED="1697844647556" TEXT="für den Test wurde der stets nur gemockt">
|
||||
|
|
@ -82394,8 +82394,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1697844649091" ID="ID_939726274" MODIFIED="1697844696080" TEXT="als Abstraktion wurde (bewußt) ein Template-Parameter gewählt"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1697844697092" ID="ID_766922475" MODIFIED="1697845768002" TEXT="kokretes Funktions-Binding">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1697844697092" ID="ID_766922475" MODIFIED="1698591435338" TEXT="konkretes Funktions-Binding">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1697844724057" ID="ID_1038347556" MODIFIED="1697844734323" TEXT="wieder ein ähnliches Problem wie bei der WorkForce-Config"/>
|
||||
<node CREATED="1697844740488" ID="ID_1999540950" MODIFIED="1697844761716" TEXT="hier aber einfacher: es wird stets nur eine Referenz benötigt">
|
||||
<icon BUILTIN="idea"/>
|
||||
|
|
@ -82431,6 +82431,9 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1698591423354" ID="ID_1641227911" MODIFIED="1698591431981" TEXT="funktioniert tatsächlich">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1697929209697" FOLDED="true" ID="ID_862130924" MODIFIED="1697930318294" TEXT="wozu braucht λ-post den ExecutionCtx(parameter)?">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
|
|
@ -82681,12 +82684,13 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="flag-pink"/>
|
||||
<node CREATED="1697933830568" ID="ID_425307167" MODIFIED="1697933841004" TEXT="Anforderung">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1697933847838" ID="ID_52485323" MODIFIED="1697933874566" TEXT="wenn Activities anstehen, muß der Scheduler laufen">
|
||||
<node COLOR="#435e98" CREATED="1697933847838" ID="ID_52485323" MODIFIED="1698592287031" TEXT="wenn Activities anstehen, muß der Scheduler laufen">
|
||||
<node CREATED="1697935493785" ID="ID_1808648428" MODIFIED="1697935513050" TEXT="der initiale Zünd-Impuls dafür muß von außen kommen"/>
|
||||
<node CREATED="1697935584350" ID="ID_1788226279" MODIFIED="1697935603608" TEXT="sobald er läuft, muß er auch seinen eigenen »Tick« aktivieren"/>
|
||||
</node>
|
||||
<node CREATED="1697934020751" ID="ID_1139695361" MODIFIED="1697934032818" TEXT="wenn nichts mehr passiert, kann er sich deaktivieren">
|
||||
<node CREATED="1697935611257" ID="ID_436115424" MODIFIED="1697935652768" TEXT="zunächst werden die Worker schlafen geschickt">
|
||||
<node COLOR="#435e98" CREATED="1697934020751" FOLDED="true" ID="ID_1139695361" MODIFIED="1698592302604" TEXT="wenn nichts mehr passiert, kann er sich deaktivieren">
|
||||
<node COLOR="#338800" CREATED="1697935611257" ID="ID_436115424" MODIFIED="1698591797688" TEXT="zunächst werden die Worker schlafen geschickt">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1697935685080" ID="ID_1125666331" MODIFIED="1698079245795" TEXT="Vorsicht: vorausschauend handeln">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
|
|
@ -82700,15 +82704,28 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1697935831136" ID="ID_328104821" MODIFIED="1697935849059" TEXT="polling workers stellen aber selbst eine Belastung dar">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1697935831136" ID="ID_328104821" MODIFIED="1698591669794" TEXT="polling workers stellen aber selbst eine Belastung dar">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1697938335223" ID="ID_490005829" MODIFIED="1697938354584" TEXT="und zwar wegen Contention und generellen OS-Resourcen"/>
|
||||
<node CREATED="1697938355148" ID="ID_1006912313" MODIFIED="1697938372181" TEXT="aber nicht kurzzeitig — dafür sind die Worker ja da"/>
|
||||
<node CREATED="1698591580181" ID="ID_1995552985" MODIFIED="1698591724502">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
bedeutet ⟹ ein <i>momentan </i>nicht benötigter Worker <font color="#161699">darf duchaus mal 200µs schlafen</font>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#949caf" DESTINATION="ID_1878267826" ENDARROW="Default" ENDINCLINATION="27;-65;" ID="Arrow_ID_150643318" STARTARROW="None" STARTINCLINATION="-182;6;"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697935894004" ID="ID_1878267826" MODIFIED="1697935929293" TEXT="⟹ muß also eine explizite Verzögerung einbauen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1697938430466" ID="ID_1280875799" MODIFIED="1697941924835" TEXT="Stufen-Schema">
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1697935894004" ID="ID_1878267826" MODIFIED="1698591764257" TEXT="⟹ kann also eine »gezielte Verzögerung« einbauen">
|
||||
<linktarget COLOR="#949caf" DESTINATION="ID_1878267826" ENDARROW="Default" ENDINCLINATION="27;-65;" ID="Arrow_ID_150643318" SOURCE="ID_1995552985" STARTARROW="None" STARTINCLINATION="-182;6;"/>
|
||||
<node COLOR="#435e98" CREATED="1697938430466" ID="ID_1280875799" MODIFIED="1698591781723" TEXT="Stufen-Schema">
|
||||
<linktarget COLOR="#7f95ab" DESTINATION="ID_1280875799" ENDARROW="Default" ENDINCLINATION="10;121;" ID="Arrow_ID_1356077365" SOURCE="ID_1342732339" STARTARROW="None" STARTINCLINATION="284;21;"/>
|
||||
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="list"/>
|
||||
<node CREATED="1697938486782" ID="ID_1684596361" MODIFIED="1697938500100" TEXT="kurzfristig ⟶ yield-wait"/>
|
||||
<node CREATED="1697938912817" ID="ID_1435841099" MODIFIED="1697938952106" TEXT="zeitnah ⟶ gezielte Pause">
|
||||
<node CREATED="1697939077160" ID="ID_1342346924" MODIFIED="1697939096276" TEXT="ein Thread-sleep in der Work-Function"/>
|
||||
|
|
@ -82716,14 +82733,16 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1697939007756" ID="ID_1814410393" MODIFIED="1697939068200" TEXT="idle-Time ⟶ schlafen schicken"/>
|
||||
</node>
|
||||
<node CREATED="1698079285650" ID="ID_1194794962" MODIFIED="1698079299495" TEXT="freie Kapazität „fließt“">
|
||||
<node CREATED="1698079285650" ID="ID_1194794962" MODIFIED="1698591930089" TEXT="freie Kapazität „fließt“">
|
||||
<arrowlink COLOR="#6e86a3" DESTINATION="ID_1003033592" ENDARROW="Default" ENDINCLINATION="269;-465;" ID="Arrow_ID_17847755" STARTARROW="None" STARTINCLINATION="-268;33;"/>
|
||||
<node CREATED="1698079326197" ID="ID_1517718994" MODIFIED="1698079334136" TEXT="ein Teil setzt sich ab"/>
|
||||
<node CREATED="1698079334681" ID="ID_1880078243" MODIFIED="1698079345414" TEXT="aber auch von den Schläfern gibt es einen Rückstrom"/>
|
||||
<node CREATED="1698079346272" ID="ID_1708377480" MODIFIED="1698079371100" TEXT="Konzentration je nach Arbeitsdichte"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1697935657451" ID="ID_1200603474" MODIFIED="1697935676437" TEXT="diese beenden sich dann nach einiger Zeit von selbst">
|
||||
<node COLOR="#338800" CREATED="1697935657451" ID="ID_1200603474" MODIFIED="1698592239675" TEXT="diese beenden sich dann nach einiger Zeit von selbst">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1697936056094" ID="ID_1569058603" MODIFIED="1697936822180" TEXT="Scheduler muß dafür sorgen, daß das auch möglich wird">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
|
|
@ -82758,10 +82777,12 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1697936154433" ID="ID_1597069116" MODIFIED="1697936164028" TEXT="schließlich bleibt nur noch der Tick übrig">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697936179454" ID="ID_446529044" MODIFIED="1697936204128" TEXT="der Tick muß erkennen, daß allein auf der Welt ist">
|
||||
<node COLOR="#338800" CREATED="1697936154433" ID="ID_1597069116" MODIFIED="1698592272887" TEXT="schließlich bleibt nur noch der Tick übrig">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1697936179454" ID="ID_446529044" MODIFIED="1698592226617" TEXT="der Tick muß erkennen, daß allein auf der Welt ist">
|
||||
<arrowlink COLOR="#4885aa" DESTINATION="ID_191013179" ENDARROW="Default" ENDINCLINATION="-9;-192;" ID="Arrow_ID_1602192304" STARTARROW="None" STARTINCLINATION="169;410;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1697936205251" ID="ID_131464995" MODIFIED="1697936223185" TEXT="das ist so nicht offensichtlich">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1697936205251" ID="ID_131464995" MODIFIED="1698591975161" TEXT="das ist so nicht offensichtlich">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node CREATED="1697936244473" ID="ID_671338782" MODIFIED="1697936373448" TEXT="der Tick kann feststellen, daß nur er selber als nächstes ansteht">
|
||||
|
|
@ -82769,6 +82790,20 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1698592246469" ID="ID_521847725" MODIFIED="1698592271417">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
wenn sich der Tick nicht mehr erneuert,
|
||||
</p>
|
||||
<p>
|
||||
ist der Scheduler stehen geblieben
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1697935467508" ID="ID_370682037" MODIFIED="1697935479215" TEXT="Reserve-Kapazität bei Bedarf aktivieren">
|
||||
|
|
@ -82850,6 +82885,10 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1698591834291" ID="ID_1003033592" MODIFIED="1698591949478" STYLE="bubble" TEXT="Freie Kapazität »fließt«">
|
||||
<linktarget COLOR="#6e86a3" DESTINATION="ID_1003033592" ENDARROW="Default" ENDINCLINATION="269;-465;" ID="Arrow_ID_17847755" SOURCE="ID_1194794962" STARTARROW="None" STARTINCLINATION="-268;33;"/>
|
||||
<font NAME="SansSerif" SIZE="16"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697940307771" ID="ID_844059029" MODIFIED="1697940319855" TEXT="Regulierungs-Schema (1.Wurf)">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
|
|
@ -83330,17 +83369,19 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698159441179" ID="ID_486995126" MODIFIED="1698523800078" TEXT="Scheduler-Tick">
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1698159441179" ID="ID_486995126" MODIFIED="1698605578216" 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ü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"/>
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1698523819504" HGAP="114" ID="ID_1592332331" MODIFIED="1698605640201" TEXT="Rahmen schaffen" VSHIFT="8">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1698524392305" ID="ID_1232693946" MODIFIED="1698605649969" TEXT="handleDutyCycle()">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1698532933228" ID="ID_1847975334" MODIFIED="1698605594973" TEXT="Periode und Deadline für Ticks">
|
||||
<linktarget COLOR="#3364f0" DESTINATION="ID_1847975334" ENDARROW="Default" ENDINCLINATION="-449;34;" ID="Arrow_ID_1046093983" SOURCE="ID_233989928" STARTARROW="None" STARTINCLINATION="222;-17;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<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"/>
|
||||
|
|
@ -83354,8 +83395,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698523868063" HGAP="124" ID="ID_26600563" MODIFIED="1698523884552" TEXT="Selbst-Überwachung">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1698523868063" HGAP="124" ID="ID_26600563" MODIFIED="1698605584160" TEXT="Selbst-Überwachung">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<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"/>
|
||||
|
|
@ -83404,6 +83445,26 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<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 COLOR="#338800" CREATED="1698592008108" ID="ID_191013179" MODIFIED="1698592226617" TEXT="bei Leerlauf: Scheduler deaktivieren">
|
||||
<arrowlink COLOR="#3e9b94" DESTINATION="ID_202320750" ENDARROW="Default" ENDINCLINATION="-1156;-61;" ID="Arrow_ID_727945119" STARTARROW="None" STARTINCLINATION="61;1261;"/>
|
||||
<linktarget COLOR="#4885aa" DESTINATION="ID_191013179" ENDARROW="Default" ENDINCLINATION="-9;-192;" ID="Arrow_ID_1602192304" SOURCE="ID_446529044" STARTARROW="None" STARTINCLINATION="169;410;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1698595424284" ID="ID_1679334387" MODIFIED="1698595479659">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
stelle fest: das wirkt (unbeabsichtigterweise) auch als <b>Zünd-Barriere</b>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1698595445913" ID="ID_284194667" MODIFIED="1698605519364" TEXT="man muß also stets schon etwas in die Queue geschickt haben, bevor man zündet">
|
||||
<arrowlink COLOR="#389bcf" DESTINATION="ID_1513214570" ENDARROW="Default" ENDINCLINATION="365;-28;" ID="Arrow_ID_554717849" STARTARROW="None" STARTINCLINATION="333;12;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</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;"/>
|
||||
|
|
@ -83422,6 +83483,10 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<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 COLOR="#338800" CREATED="1698605671588" ID="ID_1693880533" MODIFIED="1698605786967" TEXT="konnte im Start/Stop-Test explizit das Timing/Aufruf-Muster sehen">
|
||||
<arrowlink COLOR="#96abb4" DESTINATION="ID_114745098" ENDARROW="Default" ENDINCLINATION="694;-113;" ID="Arrow_ID_336093338" STARTARROW="None" STARTINCLINATION="522;22;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698372200013" ID="ID_1863445864" MODIFIED="1698372206543" TEXT="Scheduler start/stop">
|
||||
|
|
@ -83440,10 +83505,10 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<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übergänge realisieren">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698522466298" ID="ID_1846809868" MODIFIED="1698522524910" TEXT="ignite() ⟶ Tick etablieren">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1698522456723" ID="ID_1793836905" MODIFIED="1698605370497" TEXT="Zustandsübergänge realisieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1698522466298" ID="ID_1846809868" MODIFIED="1698604976684" TEXT="ignite() ⟶ Tick etablieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<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"/>
|
||||
|
|
@ -83459,23 +83524,24 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<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 COLOR="#338800" CREATED="1698523685888" ID="ID_993061444" MODIFIED="1698605364232" TEXT="die WorkForce starten">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1698523713636" ID="ID_1082114161" MODIFIED="1698523721739" TEXT="hier kö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">
|
||||
<node BACKGROUND_COLOR="#d4c1ad" COLOR="#990000" CREATED="1698523722518" ID="ID_153443695" MODIFIED="1698605359529" TEXT="vorerst aber starten wir sofort mit Maximal-Leistung">
|
||||
<arrowlink COLOR="#8a8699" DESTINATION="ID_174276213" ENDARROW="Default" ENDINCLINATION="-1083;-69;" ID="Arrow_ID_1348822312" STARTARROW="None" STARTINCLINATION="617;33;"/>
|
||||
<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 �� 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 COLOR="#338800" CREATED="1698522492081" ID="ID_1777263362" MODIFIED="1698604971384" TEXT="terminateProcessing �� Gewalt!">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1698522970735" ID="ID_728729079" MODIFIED="1698592324950" TEXT="die WorkForce kalt machen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node CREATED="1698522979070" ID="ID_27890829" MODIFIED="1698523707098" TEXT="der Destruktor wartet">
|
||||
<node COLOR="#435e98" CREATED="1698522979070" ID="ID_27890829" MODIFIED="1698592326794" TEXT="der Destruktor wartet vor der Tür...">
|
||||
<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ückkommen"/>
|
||||
|
|
@ -83483,8 +83549,33 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<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 COLOR="#338800" CREATED="1698522985869" ID="ID_319295239" MODIFIED="1698605559677" TEXT="danach die Queue leeren">
|
||||
<arrowlink COLOR="#4d8aab" DESTINATION="ID_1362227170" ENDARROW="Default" ENDINCLINATION="715;-39;" ID="Arrow_ID_940715985" STARTARROW="None" STARTINCLINATION="229;23;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1698604835846" ID="ID_581650151" MODIFIED="1698604964634" TEXT="nebenbei explizit verifiziert">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<ul>
|
||||
<li>
|
||||
hab mir den jeweiligen Quellcode angeschaut und keine Probleme gesehen
|
||||
</li>
|
||||
<li>
|
||||
auch auf Stackoverflow gibt es Hinweise, daß das so gehen soll (obwohl es kein richtiges API dafür gibt)
|
||||
</li>
|
||||
<li>
|
||||
Timing-Messungen zeigen: braucht 100µs
|
||||
</li>
|
||||
<li>
|
||||
danach kommt die gleiche Scheduler-Instanz wieder auf die Beine und verhält sich unauffällig.
|
||||
</li>
|
||||
<li>
|
||||
auch ist der erneute Start nicht feststellbar langsamer; das Hochfahren der WorkForce braucht ohnehin 1ms
|
||||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1698523062280" ID="ID_1393673316" MODIFIED="1698523095951" TEXT="BlockFlow besser nicht anfassen">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
|
|
@ -83507,7 +83598,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<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;"/>
|
||||
<arrowlink COLOR="#3364f0" 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öglichen">
|
||||
|
|
@ -83519,8 +83610,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<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;"/>
|
||||
<linktarget COLOR="#d54a7e" DESTINATION="ID_1227874220" ENDARROW="Default" ENDINCLINATION="-1477;121;" ID="Arrow_ID_677451247" SOURCE="ID_748059800" STARTARROW="None" STARTINCLINATION="-536;-12;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -87487,7 +87578,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="forward"/>
|
||||
</node>
|
||||
<node COLOR="#5b280f" CREATED="1692727511559" ID="ID_424129996" MODIFIED="1692741760893" TEXT="Nachteil: muß dann Mehrfach-Aktivierungen blocken">
|
||||
<linktarget COLOR="#f72a8f" DESTINATION="ID_424129996" ENDARROW="Default" ENDINCLINATION="-365;-20;" ID="Arrow_ID_1444084792" SOURCE="ID_88816908" STARTARROW="None" STARTINCLINATION="-53;219;"/>
|
||||
<linktarget COLOR="#f72a8f" DESTINATION="ID_424129996" ENDARROW="Default" ENDINCLINATION="-547;-50;" ID="Arrow_ID_1444084792" SOURCE="ID_88816908" STARTARROW="None" STARTINCLINATION="-53;219;"/>
|
||||
<linktarget COLOR="#653694" DESTINATION="ID_424129996" ENDARROW="Default" ENDINCLINATION="-196;-12;" ID="Arrow_ID_609240876" SOURCE="ID_802575724" STARTARROW="None" STARTINCLINATION="367;18;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1692741724945" ID="ID_41961311" MODIFIED="1692741732215" TEXT="geht aber relativ einfach...."/>
|
||||
|
|
@ -89006,10 +89097,182 @@ Date:   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ß er »läuft«"/>
|
||||
<node CREATED="1698521946743" ID="ID_783620032" MODIFIED="1698521949779" TEXT="wieder anhalten"/>
|
||||
<node COLOR="#338800" CREATED="1698521856803" ID="ID_1548722737" MODIFIED="1698604615321" TEXT="verify_StartStop">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1698592367530" ID="ID_1513214570" MODIFIED="1698605544097" TEXT="tatsächlich Activities einplanen">
|
||||
<linktarget COLOR="#389bcf" DESTINATION="ID_1513214570" ENDARROW="Default" ENDINCLINATION="365;-28;" ID="Arrow_ID_554717849" SOURCE="ID_284194667" STARTARROW="None" STARTINCLINATION="333;12;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1698595265649" HGAP="27" ID="ID_1194558258" MODIFIED="1698595394206" VSHIFT="6">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
ohne <i>das </i>wird nämlich gar kein Tick-Zyklus aufgemacht
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...da ich das handleDutyCycle eben auch zum „zünden“ verwenden möchte, entsteht hier so etwas wie eine zusätzliche Zünd-Barriere; war nicht geplant, gefällt mir aber: man muß also auch Holz in den Ofen stecken, bevor man zündet...
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<font NAME="SansSerif" SIZE="11"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1698521924261" ID="ID_1936048598" MODIFIED="1698596926165" TEXT="explizit in Gang setzen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1698521939608" ID="ID_501619176" MODIFIED="1698596927547" TEXT="sehen daß er »läuft«">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1698592367530" ID="ID_1362227170" MODIFIED="1698605559677" TEXT="wieder anhalten">
|
||||
<linktarget COLOR="#4d8aab" DESTINATION="ID_1362227170" ENDARROW="Default" ENDINCLINATION="715;-39;" ID="Arrow_ID_940715985" SOURCE="ID_319295239" STARTARROW="None" STARTINCLINATION="229;23;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1698592552588" HGAP="25" ID="ID_533479899" MODIFIED="1698601875401" TEXT="starten und Destruktor im laufenden Zustand aufrufen" VSHIFT="5">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node CREATED="1698597769948" HGAP="30" ID="ID_122236829" MODIFIED="1698597786923" TEXT="Timings beobachtet" VSHIFT="6">
|
||||
<icon BUILTIN="list"/>
|
||||
<node CREATED="1698598469549" ID="ID_1138554689" MODIFIED="1698600198874" TEXT="Erster Aufruf / Fehlzündung: 50µs"/>
|
||||
<node CREATED="1698598501393" ID="ID_74579066" MODIFIED="1698600214538">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Post+erfolgreiche Zündung: <b>1ms</b>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1698598597804" ID="ID_469136225" MODIFIED="1698600221833">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
gewaltsam Angehalten: <b>60ms</b>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<node COLOR="#435e98" CREATED="1698601411556" HGAP="71" ID="ID_1350044649" MODIFIED="1698603209784" VSHIFT="9">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
<u>korrekt</u>!
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
tend-next auf den Tick ≔ 50ms
|
||||
</li>
|
||||
<li>
|
||||
WorkForce wartet beim Shutdown pauschal 20ms (IDLE_WAIT)
|
||||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<edge COLOR="#339fc5"/>
|
||||
<font NAME="SansSerif" SIZE="10"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1698598661062" ID="ID_1625946073" MODIFIED="1698598671206" TEXT="erneuter Post: 60µs"/>
|
||||
<node CREATED="1698598695895" ID="ID_746587515" MODIFIED="1698598708241" TEXT="noch 'n Post: 9µs"/>
|
||||
<node CREATED="1698598780502" ID="ID_97969711" MODIFIED="1698600227433">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
nochmal zünden: <b>1ms</b>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node COLOR="#5b280f" CREATED="1698599903981" HGAP="2" ID="ID_1418129606" MODIFIED="1698600447671" TEXT="Messungen dominiert von Cache-Effekten" VSHIFT="15">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Cache-Effekte können mehrere 100µs ausmchen. Dennoch ist dieses Pattern mit leichten Schwankungen reproduzierbar in vielen Läufen, und zeigt auch fast keinen Unterschied, wenn mit -O3 gebaut. Man beachte im Besonderen daß bei der ersten Fehlzündung die WorkForce nicht hochskaliert wird. Da steckt also die Zeit, und das ist auch mit dem WorkForce_test konsistent.
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1698601884014" HGAP="-6" ID="ID_254540476" MODIFIED="1698601930336" STYLE="bubble" VSHIFT="7">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
<b>Fazit</b>: Verhalten wie erwartet
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="forward"/>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1698601933709" HGAP="25" ID="ID_114745098" MODIFIED="1698605786967" VSHIFT="2">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<ul>
|
||||
<li>
|
||||
der erste gestartete Thread macht alle Dispaches in Serie
|
||||
</li>
|
||||
<li>
|
||||
danach wird er per tendNext gezielt auf den Tick +50ms geschickt
|
||||
</li>
|
||||
<li>
|
||||
alle anderen Threads gehen in höchstens einen Wartezyklus
|
||||
</li>
|
||||
<li>
|
||||
der WorkForce-Destruktor wartet jeweils auf den tendNext-Thread
|
||||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Im Detail nachvollzogen durch Trace-Log der aktuellen Zeit, incl. Thread-Nummer
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
man konnte jeweils deutliche Cache-Effekte beobachten
|
||||
</li>
|
||||
<li>
|
||||
abgesehen davon waren die Timings stabil
|
||||
</li>
|
||||
<li>
|
||||
die separat im Test gemessenen Zeiten passen perfekt mit den Zeiten und dem Muster aus dem Trace zusammen
|
||||
</li>
|
||||
<li>
|
||||
die Threads brauchen in der Tat eine Zeitspanne von 100-200µs, bis sie aktiv werden
|
||||
</li>
|
||||
<li>
|
||||
insofern variiert es von Lauf zu Lauf erheblich, wie viele Threads überhaupt den Schlaf-Auftrag bekommen
|
||||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<linktarget COLOR="#96abb4" DESTINATION="ID_114745098" ENDARROW="Default" ENDINCLINATION="694;-113;" ID="Arrow_ID_336093338" SOURCE="ID_1693880533" STARTARROW="None" STARTINCLINATION="522;22;"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1698592173326" ID="ID_1298598152" MODIFIED="1698592641089" TEXT="verify_Disengage">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698592075524" ID="ID_202320750" MODIFIED="1698592208068" TEXT="Test für selbständiges Deaktivieren bei leerer Queue">
|
||||
<linktarget COLOR="#3e9b94" DESTINATION="ID_202320750" ENDARROW="Default" ENDINCLINATION="-1156;-61;" ID="Arrow_ID_727945119" SOURCE="ID_191013179" STARTARROW="None" STARTINCLINATION="61;1261;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1698592582560" ID="ID_953889358" MODIFIED="1698592600782" TEXT="muß dafür ca 2sec warten">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1698592605242" ID="ID_233491478" MODIFIED="1698592613559" TEXT="auf Dauer kann man diesen Test deaktivieren"/>
|
||||
<node CREATED="1698592614124" ID="ID_696418800" MODIFIED="1698592633653" TEXT="oder wir führen längerfristig mal verschiedene Test-Tiefen ein"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1698247388556" ID="ID_1402046356" MODIFIED="1698448243571" TEXT="invokeWorkFunction">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -91746,6 +92009,20 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1698454491296" ID="ID_1287561281" LINK="#ID_410477206" MODIFIED="1698454517684" TEXT="macht Code complex, z.B. Grooming-Token-Behandlung"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1698605224248" ID="ID_1700976561" MODIFIED="1698605230805" TEXT="Auslegung der Laststeuerung">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1698605001334" ID="ID_174276213" MODIFIED="1698605242320" TEXT="ist weicheres Anfahren der WorkFoce sinnvoll?">
|
||||
<linktarget COLOR="#8a8699" DESTINATION="ID_174276213" ENDARROW="Default" ENDINCLINATION="-1083;-69;" ID="Arrow_ID_1348822312" SOURCE="ID_153443695" STARTARROW="None" STARTINCLINATION="617;33;"/>
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1698605282416" ID="ID_778966135" MODIFIED="1698605308782" TEXT="man könnte sich schrittweise rantasten — müßte dann aber auch bei Bedarf hochskalieren">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1698605255428" ID="ID_185275385" MODIFIED="1698605272798" TEXT="derzeit wird einfach mal die komplette WorkForce gestartet"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1698605273458" ID="ID_232164751" MODIFIED="1698605317281" TEXT="auf meinem 8-Kerner braucht das 1ms">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -92463,16 +92740,13 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1698526392894" ID="ID_1798534041" MODIFIED="1698526620878" TEXT="der Scheduler könnte ohne Deadline leben, aber der BlockFlow erzwingt sie">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Für die Implementierung des Schedulers sind Deadlines technisch irrelevant — 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ß</b> jede Activity eine Deadline haben. Eine Activity ohne Deadline wäre ultimativ verbindlich: <i>irgendwann nach </i>ihrem Startzeitpunkt <i>muß sie aktiviert werden, </i>und jede spätere Activity ist durch sie verdeckt
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698533069058" ID="ID_1475771662" MODIFIED="1698533129903" TEXT="klares Trennkriterium einführen">
|
||||
<linktarget COLOR="#ee3a6b" DESTINATION="ID_1475771662" ENDARROW="Default" ENDINCLINATION="-1121;-88;" ID="Arrow_ID_211999245" SOURCE="ID_696019318" STARTARROW="None" STARTINCLINATION="1410;120;"/>
|
||||
|
|
@ -92485,9 +92759,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1698526632870" ID="ID_1680559422" MODIFIED="1698526704177">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Problem: wenn Rückstau im Scheduler entsteht,
|
||||
|
|
@ -92496,8 +92768,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
wird jede Deadline irgendwann überfahren
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</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"/>
|
||||
|
|
@ -92508,55 +92779,43 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<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önnen nicht beliebig lange blockiert sein">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...es gibt zwar einen Block-Mechanismus (das Epoch-Gate), doch damit läßt man den Block-Pool anwachsen und die lineare Suche durch die Blöcke macht sich bald bemerkbar
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1698528350522" ID="ID_1884380820" MODIFIED="1698528623316" TEXT="Epochen können nicht beliebig groß werden">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...weil dann der Überlauf-Mechanismus zu weit in die Zukunft ausgreift, und sich die Steuerung in absehbarer Zeit<i> nicht mehr fängt.</i>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1698528368302" ID="ID_516251987" MODIFIED="1698528683619" TEXT="bei normaler Größe sind keine beliebig weiten Zeitschritte möglich">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Daher ist es nicht möglich, eben sehr große/lange Tasks vorzuplanen; man erzeugt eine Flut leerer Blöcke dazwischen, und die Suchzeiten degenerieren
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1698528414600" ID="ID_842501295" MODIFIED="1698528848581" TEXT="darf nach überschrittener Deadline die Activity nicht (mehr) dereferenzieren">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Damit scheiden die naheliegenden <i>Reparatur-Ansätze</i> weitgehend aus: es ist nicht möglich, eine „überfahrene“ 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>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -92580,16 +92839,13 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1698530385776" ID="ID_365804773" MODIFIED="1698530398452" TEXT="Innen-Überwachung: der Tick">
|
||||
<node CREATED="1698533322431" ID="ID_1153107499" MODIFIED="1698534741599">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
der Tick selber ist eine <b>verbindliche Aktivität</b>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</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>
|
||||
|
|
@ -92617,31 +92873,25 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1698529860655" ID="ID_315208147" MODIFIED="1698529868790" TEXT="es muß einen sauberen Abbruch geben">
|
||||
<node CREATED="1698529876100" ID="ID_1032670149" MODIFIED="1698530090626" TEXT="pausieren der Render-Prozesse">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
sollte automatisch passieren, wenn die internen Gesundheits-Checks scheitern
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</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 übrige System muß gesund bleiben"/>
|
||||
<node CREATED="1698529943153" ID="ID_1379758104" MODIFIED="1698530377336" TEXT="Notfall-Shutdown wird dann problematisch">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...wenn wir noch einen Worker-Pool haben, der mit langlaufenden berechnungen geblockt ist, dann wird jeder reguläre emergency-Shutdown im Destruktor hä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>  dagegen würde die bereits geleistete Arbeit einfach verwerfen.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698529979672" ID="ID_1042828147" MODIFIED="1698529998709" TEXT="Alternative bieten">
|
||||
|
|
@ -92909,9 +93159,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="flag-pink"/>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1698530968938" ID="ID_187393453" MODIFIED="1698531103087" STYLE="bubble">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p style="text-align: center">
|
||||
Der Scheduler arbeitet nur in einem begrenzten Bereich
|
||||
|
|
@ -92923,8 +93171,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
Dann ist ein spezielle Notzustand zu aktivieren
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<edge COLOR="#930246"/>
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
|
|
@ -92943,16 +93190,13 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="hourglass"/>
|
||||
<node CREATED="1698532052993" ID="ID_503858341" MODIFIED="1698532312084" TEXT="Problem: Berechnunsstand feststellen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...der gesamte Entwurf bisher beruht auf Ereignis-Verknüpfung und sieht keine generische Erfassung aller tatsächlich berechneten Schritte vor. Wenn also die Scheduler-Emergency ausgelöst wird, ist ein zufällig verteiltes Muster an Einzel-Jobs abgeschlossen, und der Rest fehlt. Wollte man hier einen generischen Ansatz für das Wiederanlaufen schaffen, so müßte man alle Berechnungsprozesse unter eine einzige Abstraktion subsummieren können. Das halte ich für gefährlich...
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698532335022" ID="ID_849438801" MODIFIED="1698532356066" TEXT="Konsequenz ⟹ Player-Clients brauchen Recovery-Mechanismus">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
|
|
@ -93067,16 +93311,13 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<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ür Grenzfälle dienen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Beispiel: ein »final Render« bei dem pro Frame mehr als 30 Sekunden Rechenzeit notwendig sind; dies würde die Auslegung des Schedulers sprengen
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1698535623469" ID="ID_1256815125" MODIFIED="1698535635467" TEXT="ermöglicht Performance-Optimierung des Schedulers"/>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue