preemptive vs cooperative: attempt at formalization
Simon Marlow
simonmar at microsoft.com
Wed Apr 12 05:58:32 EDT 2006
On 11 April 2006 22:24, John Meacham wrote:
> I'd like to be a bit more formal when it comes to the distinction
> between cooperative and preemptive implementations of concurrency,
> here is a first attempt.
>
> 1. termination,
>
> In a concurrent implementation, a thread performing an infinite loop
> with no IO or interaction with the outside world can potentially stall
> switching to another thread forever, in FP, we usually denote an
> infinite loop by _|_. so I think the first difference would be:
>
> [Rule 1]
> * in a cooperative implementation of threading, any thread with value
> _|_ may cause the whole program to have value _|_. In a preemtive
> one, this is not true.
I don't know what it means for a thread to "have value _|_". A thread
is defined by its observable effects, threads don't have values.
> I am using _|_ in the stronger sense of non-termination, not including
> things like exceptions which should have a well defined behavior.
>
> 2. fairness
>
> Assuming no thread has value _|_ now, what can both models guarentee
> when it comes to fairness?
>
> both can guarentee every runnable thread will eventually run with a
> round-robin type scheduler.
What if one of the threads never yields in a cooperative system? Even
if it isn't calculating _|_, if it's just endlessly doing some pointless
IO?
Cheers,
Simon
More information about the Haskell-prime
mailing list