Choir
Task Orchestration Framework
Orchestration: the planning or coordination of the elements of a situation to produce a desired effect, especially surreptitiously
Why?
give: control flow (at macro level)
get: free scaling (both perf and complexity)
@Ralith:
any time you take control flow away from the user you have a really high usefulness bar to clear
Scalable?
Way to organize your thoughts, and code
Separating scheduling from structure
Example
let mut choir = choir::Choir::new ();
let _worker1 = choir.add_worker ("worker1" );
let first = choir.add_task (|| { println! ("First" ); }).run ();
let mut second = choir.add_task (|| { println! ("Second" ); });
second.depend_on (&first);
What is the problem?
Rust + ECS = …
if you have an advanced ECS, everything looks like a system
ECS-centric approach
Task-centric approach
Choir features
task dependencies, including from running tasks
spawning tasks from tasks
multi- and iter- tasks
flexible workers
Perf
Executing 100k(!) empty tasks:
individually: 28ms
as a multi-task: 6ms
Each task: 60ns to 280ns
Future
circular dependency detection
exhaustive testing with Loom
scheduler for Hecs
Resume presentation
Choir Task Orchestration Framework Orchestration: the planning or coordination of the elements of a situation to produce a desired effect, especially surreptitiously
{"metaMigratedAt":"2023-06-17T02:27:26.495Z","metaMigratedFrom":"YAML","title":"Choir","breaks":true,"description":"Task Orchestration Framework.","slideOptions":"{\"theme\":\"serif\",\"transition\":\"fade\"}","contributors":"[{\"id\":\"979e994f-8a6f-4ba5-b86c-9af3abd000ad\",\"add\":4549,\"del\":2152}]"}