> Joe,
>
> > Regarding efficiency, can someone comment on whether there is any difference
> > between the stream and continuation models in the effect on parallelism?
>
> Parallelism could be ENHANCED by a suitable continuation I/O model, such as
 the
> one I am working on (slowly), since with asynchronous I/O, you can carry on
> with calculations after submitting an I/O request (unless you are explicitly
> waiting on the result of an I/O operation), and I/O requests themselves
> may sometimes be safely carried out in parallel.

This applies equally to the request model.  Nothing prevents the submission
(but not necessarily resolution) of a later I/O request during resolution
of an earlier request if those requests are independent (and the request
stream is hyper-strict).

Overall, I *think* the two systems are equivalent for parallel
evaluation, but I'd be interested in any evidence to the contrary
(e.g.  if the conditions for parallel evaluation are different in
either case)...

Obviously I/O must be sequential at some level if the necessary
dependencies are to be enforced.  This may be at the IO controller
level rather than the language level, though, and hence some
parallelism may be gained even in an apparently sequential program.
Parallelism may also be gained by speculation, overlapping
"non-conflicting" accesses, or if all IO updates to a location return
the same value (this can happen in e.g. a knowledge base -- confluence
at a level beyond the functional program!).

No matter what the level, the IO "bottleneck" which is a feature of
using requests/continuations is highly undesirable in a truly
distributed system (for example, a parallel database).  Does anyone
know how to avoid this, cleanly?

Kevin


Reply via email to