
I wrote that
If the scheduler performance is insufficient, it will not be able to maintain a low M. If it does manage to maintain a low M, then its performance is sufficient.
Now that I think about it, this isn't true for the typical fork-join parallelism. http://gee.cs.oswego.edu/dl/papers/fj.pdf If we have for example an active function fib(n) that returns fib(n-1)+fib(n-2), it will quickly generate a large N. In this case however, if the task queue is actually a stack, it can be reduced in a single execution as the older tasks will become ready as soon as the newer tasks are done. (But it will take logN to fill it. On second thought, with a FIFO policy it will be generated in a single pass and then reduced in logN passes. So it's basically the same.) Not that fork-join parallelism makes much sense for a single-threaded active object. :-)