Maestro


I had expected that the first word on Maestro would come on this blog, but that’s what happens when you take time between posts.


We first discussed it during PDC at the Thursday panel on parallel programming, we discussed it on Channel 9, and then Josh Phillips posted his excellent article about isolation and message-passing on the PFX team blog. It was really exciting that Dr. Dobbs contacted me yesterday to learn a bit more about Maestro, and it was really impressive to see how fast it was published. It was particularly fun to get the word out on the same day I held a web-based seminar on Maestro at the University of Illinois. Don’t know if that’s been published on their site yet.


As I pointed out in the DDJ interview and have said on this blog, I really think we can learn some things from how the web is programmed when we think about how we are going to scale manycore applications to (possibly) hundreds of hardware threads, or try to mix CPU-based code with GPU-based code with a non-consistent memory model between them, or integrate with cloud-based services under the software + services model. For raw performance, message-passing models are much too expensive, but to scale from local to server to cloud, we need a programming model that does not assume that pointers are valid beyond component boundaries. An actor-based model can, with the right runtime bindings underneath, provide exactly that.


If things go our way, we should be able to have some exciting things to tell about Maestro within the next couple of months. Until then, I’ll try to introduce a few concepts of Maestro here on this blog just to keep things interesting…

Comments (3)

  1. dvyukov says:

    Niklas, looking forward to further blogs about Maestro! It seems that actor/agent model is really the only way to go for general unstructured concurrency.

    Particularly I am interested as to whether it will be possible to pass data between domains w/o copying (immutable data or copy-on-write)? And about failure control – will there be something like Erlang’s supervisors, what will be if agent throws exception?

    Thanks and regards,

    Dmitriy V’jukov

  2. I’ll write something more detailed about passing data between domains later, but we’re working on all reasonable fronts to lower the overhead.

    One constraint we have with Maestro is that we really do want it to work with current .NET implementations (our prototype runs really well on VS 2008!).

    Solutions based on copy-on-write as well as ownership transfer all seem to require changes to the VM in order to be efficient and safe.

    Thus, our current focus is on encouraging use of immutable data for in-process communication.

    The failure model in Maestro requires a longer reply; I’ll make sure to discuss that in the future. a) it’s not finalized, b) it’s not the same as in Erlang.