Cancelation -- use cases
Brian Goetz
brian.goetz at oracle.com
Fri Dec 28 08:20:03 PST 2012
I've been working through some alternatives for cancellation support in
infinite streams. Looking to gather some use case background to help
evaluate the alternatives.
In the serial case, the "gate" approach works fine -- after some
criteria transpires, stop sending elements downstream. The pipeline
flushes the elements it has, and completes early.
In the parallel unordered case, the gate approach similarly works fine
-- after the cancelation criteria occurs, no new splits are created, and
existing splits dispense no more elements. The computation similarly
quiesces after elements currently being processed are completed,
possibly along with any up-tree merging to combine results.
It is the parallel ordered case that is tricky. Supposing we partition
a stream into
(a1,a2,a3), (a4,a5,a6)
And suppose further we happen to be processing a5 when the bell goes
off. Do we want to wait for all a_i, i<5, to finish before letting the
computation quiesce?
My gut says: for the things we intend to cancel, most of them will be
order-insensitive anyway. Things like:
- Find the best possible move after thinking for 5 seconds
- Find the first solution that is better than X
- Gather solutions until we have 100 of them
I believe the key use case for cancelation here will be when we are
chewing on potentially infinite streams of events (probably backed by
IO) where we want to chew until we're asked to shut down, and want to
get as much parallelism as we can cheaply. Which suggests to me the
intersection between order-sensitive stream pipelines and cancelable
stream pipelines is going to be pretty small indeed.
Anyone want to add to this model of use cases for cancelation?
More information about the lambda-libs-spec-observers
mailing list