New Bound Threads Proposal
Dean Herington
heringto at cs.unc.edu
Wed May 14 11:51:43 EDT 2003
It still seems to me that too much "fuss" is being made/proposed over binding or not binding the main Haskell thread to the main OS thread. I remain to be convinced that anything more complicated than "The main Haskell thread is bound to the main OS
thread. Period." is justified.
Simon Peyton-Jones wrote:
> The principal downside is that naïve users might end up with
> unexpected thread switching for simple concurrent programs.
and Wolfgang Thaller replied:
> Yes. (However, for "simple concurrent programs" that cost should be negligible.)
Is it a real concern that a naive user will get significant unexpected overhead?
Besides, the example being discussed above,
| main = forkIO doLongComputation >> doAnotherLongComputation
is unrealistic. Without coordination between the two long computations, if the main thread finishes its `doAnotherLongComputation` before the auxiliary thread finishes its `doLongComputation`, the latter will be summarily abandoned.
Simon Peyton-Jones wrote:
> So, we could arrange that runMain did the forkIO wrapping above, unless a command line flag said "no, make the main thread bound" in which case we can inject a call to runMain' instead, which refrains from doing a forkIO.
I think it's best to have the runtime system do as little implicit stuff as possible. In particular, it's unattractive for it to fork a Haskell thread (conditionally, no less).
> So the proposal boils down to:
> - yes, at the impl level the main thread is bound, as you suggest
> - but at the user level, the programmer can control whether or not
> his 'main' is bound
> - default is not-bound
If boundedness is not unconditional (as I prefer), I would suggest "bound" as the better default (favoring function over performance).
Dean
More information about the FFI
mailing list