diff --git a/docs/developer/README.md b/docs/developer/README.md index 49a7faa..dd8bb54 100644 --- a/docs/developer/README.md +++ b/docs/developer/README.md @@ -310,6 +310,6 @@ Not visible in the code of notebooks, applications, or workflow packages: 7. **Values modified in place.** In the user's process, a notebook that modifies a value `client.output` returned changes what later requests read. A shallow copy protects the dicts of coordinates and masks, not arithmetic in place. 8. **A hosted workspace.** With `connect()`, the users of a proposal would share one workspace and one history. Open are whether its users share the values in memory, or it separates or bounds them per user, how it bounds the memory of a workspace, and when it closes a workspace that is idle ([ADR 0002](adr/0002-a-value-lives-while-something-keeps-it.md), scipp/essapps#27). 9. **Reaching stages and accumulators.** No client call lists the stages and accumulators of a workspace or reopens one by its ID, and they are not in the changes. So a second client of a workspace reads every value the workspace keeps, but reaches a stage or an accumulator of the first client only if it is handed the object. Whether the client lists them, or reopens one by its ID, is open. -10. **Where bindings run.** Bindings run on threads of the application's process, so a reduction shares the interpreter lock, the memory, and a crash with the application. If a process boundary is needed, it goes at (c), between the workspace and worker processes, since a value then moves to the workspace once and the application reads it many times. Which requests run in a worker, and whether a stage or a driver can, is open (scipp/essapps#184). +10. **Where bindings run.** Bindings run on threads of the workspace's process, one by default. A reduction that is parallel inside, as those of LoKI are through dask and TBB, gains nothing from more threads, and its peak memory multiplies; the best number depends on the instrument, so an application sets `workers`. A reduction shares the interpreter lock, the memory, and a crash with the application. Worker processes would separate them, and are not built: measured on LoKI data, they are slower than a stage in the workspace's process, and reading a cut of a value held in another process takes about 25 ms against 0.1 ms. If they are built, the boundary goes at (c), between the workspace and the workers, since a value then moves to the workspace once and the application reads it many times; the rows of one stage would have to run in one worker. A process that runs without a person, such as the automatic reduction, is the likely first to need them (scipp/essapps#184). 11. **The path of a value between histories.** Writing, naming, publishing, listing, and loading a file ([deployments.md](deployments.md#one-proposal-several-histories)) are one design, which does not exist yet (scipp/essapps#184, #152, #176). 12. **The automatic reduction as a process.** How it routes each new file to the workspace of its proposal, when it opens and closes those workspaces, and where its configuration is kept, which must outlive a restart and be editable while the process runs (scipp/essapps#151).