On Tue, Jul 26, 2011 at 10:21 AM, Stefan Hajnoczi <stefa...@linux.vnet.ibm.com> wrote: > QEMU is event-driven and suffers when blocking operations are performed > because > VM execution may be stopped until the operation completes. Therefore many > operations that could block are performed asynchronously and a callback is > invoked when the operation has completed. This allows QEMU to continue > executing while the operation is pending. > > The downside to callbacks is that they split up code into many smaller > functions, each of which is a single step in a state machine that quickly > becomes complex and hard to understand. Callback functions also result in > lots > of noise as variables are packed and unpacked into temporary structs that pass > state to the callback function. > > This patch series introduces coroutines as a solution for writing asynchronous > code while still having a nice sequential control flow. The semantics are > explained in the second patch. The fourth patch adds automated tests. > > A nice feature of coroutines is that it is relatively easy to take synchronous > code and lift it into a coroutine to make it asynchronous. Work has been done > to move qcow2 request processing into coroutines and thereby make it > asynchronous (today qcow2 will perform synchronous metadata accesses). This > qcow2 work is still ongoing and not quite ready for mainline yet. > > v8: > * Bisectability: introduce gthread implementation before ucontext/fibers
Aneesh's code on top of this will go in separately. We're good to go. Stefan