Am 27.07.2011 11:45, schrieb Aneesh Kumar K.V: > On Tue, 26 Jul 2011 10:21:12 +0100, 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 > > Can we also get CoMutex and CoQueue patches also merged. I use them in > the VirtFS series. > > http://repo.or.cz/w/qemu/kevin.git/shortlog/refs/heads/coroutine-devel > http://repo.or.cz/w/qemu/v9fs.git/commit/318ef0b9b01cd296f8c30d8288139b9bed859892
I introduce these in my block coroutine patches. I posted a RFC last week and the first "real" patch series yesterday, so I hope they get review and can be merged into master soon. Kevin