One image at a time. The process blocks on every step. IMAGE 1 Fetch → Save→ Sleep IMAGE 2 waits… IMAGE 3 waits… Everything waits. 02 | sync-loop Version interactive (mise en ligne à venir) : https://slides.darkwood.com/slides/flow-thispersondoesnotexist @matyo91
One image at a time. The process blocks on every step. for (...) { fetch(); save(); sleep(); } 02 | sync-loop Version interactive (mise en ligne à venir) : https://slides.darkwood.com/slides/flow-thispersondoesnotexist @matyo91
happening? A hidden pipeline, repeated N times. ↓ ↓ Fetch Save Report 03 | pipeline Version interactive (mise en ligne à venir) : https://slides.darkwood.com/slides/flow-thispersondoesnotexist @matyo91
happening? A hidden pipeline, repeated N times. Each image is an independent work unit. 03 | pipeline Version interactive (mise en ligne à venir) : https://slides.darkwood.com/slides/flow-thispersondoesnotexist @matyo91
Independent units. Same pipeline. Image 1 Image 2 Pipeline Fetch → Save → Report Image 3 Why not run them together? 04 | opportunity Version interactive (mise en ligne à venir) : https://slides.darkwood.com/slides/flow-thispersondoesnotexist @matyo91
steps once. Every Ip follows the same path. ↓ ↓ Ip Fetch Image Save Image 06 | pipeline-steps Version interactive (mise en ligne à venir) : https://slides.darkwood.com/slides/flow-thispersondoesnotexist @matyo91
Describe steps once. Every Ip follows the same path. Report 06 | pipeline-steps Version interactive (mise en ligne à venir) : https://slides.darkwood.com/slides/flow-thispersondoesnotexist @matyo91
process. BEFORE · BLOCKING sleep(1); Entire process frozen. AFTER · COOPERATIVE $driver->delay($delay); Only this fiber suspends. Rate limiting per unit. Progress for everyone else. 07 | migration @matyo91
8.1 Waiting becomes productive. Fiber A delay - suspended waiting Fiber B downloading image working Fiber C saving to disk working Fiber A resumed - fetch starts resume FiberDriver delegates execution. Flow orchestrates the pipeline. 08 | fibers Version interactive (mise en ligne à venir) : https://slides.darkwood.com/slides/flow-thispersondoesnotexist @matyo91
model Enqueue work. Await completion. for (...) { $flow(new Ip(...)); } $flow->await(); 09 | execution Version interactive (mise en ligne à venir) : https://slides.darkwood.com/slides/flow-thispersondoesnotexist @matyo91
model Enqueue work. Await completion. enqueue Ip enqueue Ip enqueue Ip Flow scheduler pipeline execution await The for loop produces work. Flow schedules it. 09 | execution Version interactive (mise en ligne à venir) : https://slides.darkwood.com/slides/flow-thispersondoesnotexist @matyo91
is - and is not. ✕ Event Loop ✕ Fiber implementation ✕ Runtime ✕ ReactPHP / Amp replacement ✓ Orchestration model 10 | what-flow-is Version interactive (mise en ligne à venir) : https://slides.darkwood.com/slides/flow-thispersondoesnotexist @matyo91
is - and is not. FiberDriver AmpDriver ReactDriver SwooleDriver Describe the pipeline once. Choose the driver for execution. 10 | what-flow-is Version interactive (mise en ligne à venir) : https://slides.darkwood.com/slides/flow-thispersondoesnotexist @matyo91
Same orchestration model. Different domains. YouTube ↓ ↓ Scrape Transcript Publish Video Scene gen 11 | applications Version interactive (mise en ligne à venir) : https://slides.darkwood.com/slides/flow-thispersondoesnotexist @matyo91
↓ Same orchestration model. Different domains. ↓ Encode Persist AI Agents ↓ Read Transform 11 | applications Version interactive (mise en ligne à venir) : https://slides.darkwood.com/slides/flow-thispersondoesnotexist @matyo91
↓ Same orchestration model. Different domains. Act Independent units. Composable steps. One orchestrator. 11 | applications Version interactive (mise en ligne à venir) : https://slides.darkwood.com/slides/flow-thispersondoesnotexist @matyo91
→ → Sync loop Flow pipeline Darkwood scale @matyo91 Version interactive (mise en ligne à venir) : https://slides.darkwood.com/slides/flow-thispersondoesnotexist