Consolidate and optimize scheduling of blocking tasks
... and add many other entailed (and not so) improvements to AvalancheSchedulerSvc and GaudiHive in general.
Primary:
- integrate scheduling of CPU-blocking tasks into AvalancheSchedulerSvc for better performance and cleaner code;
- remove IOBoundAlgSchedulerSvc and IOBoundAlgTask;
- remove AvalancheSchedulerSvc::promoteAsyncToScheduled and AvalancheSchedulerSvc::promoteAsyncToExecuted;
- introduce TaskSpec for better expressiveness and performance (less repetitive metadata juggling when moving tasks through FSM: less copying and fewer index-to-name conversions).
Secondary:
- prefer std::string_view in AlgResourcePool;
- decouple AlgoExecutionTask from TBB and rename it to AlgTask;
- improve debug messages in AvalancheSchedulerSvc;
- remove unnecessary StatusCode checks and prefer generalized lambdas in AlgTask, and make the latter header-only;
- add (UN)LIKELY to many if-statements;
- rename references to the category of tasks that can (and need to) be scheduled preemptively from 'I/O-bound' to broader 'Blocking' in Algorithm and AvalancheSchedulerSvc properties, as well as a few other facilities.
Edited by Illya Shapoval