Details
-
Type:
Improvement
-
Status:
Open
-
Priority:
Major
-
Resolution: Unresolved
-
Affects Version/s: None
-
Fix Version/s: None
-
Component/s: Core Classes/Modules
-
Labels:None
-
Number of attachments :2
Description
This bug will track work to integrate support for Lukas Stadler's JVM coroutines (part of the MLVM family of projects) into Enumerator#next/rewind and Fiber.
Currently both features are implemented using native threads. This works, but makes them considerably heavier than they ought to be. Lukas's work to add coroutines to the JVM makes it possible for us to have very efficient coroutine-like libraries like Enumerator#next and Fiber. We should incorporate support for his work, conditionally loaded only when it is available.
I'm attaching a coroutine-based-Fibers patch provided by Lukas. This is an old patch that needs updating, but it may not take too much to do that. We also would need to isolate this and have a thread-based impl that we use on non-coro JVMs.
There's also some early work in the "coro" branch to make Enumerator#next and Enumerator#rewind use Lukas's coroutines.
-
- coro_fibers.patch
- 07/Feb/11 6:18 PM
- 19 kB
- Charles Oliver Nutter
-
Hide
- coroutine_classes.jar
- 07/Feb/11 6:24 PM
- 57 kB
- Charles Oliver Nutter
-
- META-INF/MANIFEST.MF 0.0 kB
- java/dyn/CoroutineSupport.class 8 kB
- java/dyn/CoroutineSupport.java 11 kB
- java/dyn/Coroutine.class 2 kB
- java/dyn/Coroutine.java 3 kB
- java/.../CoroutineLocal$CoroutineLocalMap$Entry.class 0.7 kB
- java/.../CoroutineLocal$CoroutineLocalMap.class 6 kB
- java/dyn/CoroutineLocal.class 4 kB
- java/dyn/CoroutineLocal.java 17 kB
- java/dyn/AsymCoroutine$Iter.class 1 kB
- java/dyn/AsymCoroutine.class 2 kB
- java/dyn/AsymCoroutine.java 4 kB
- java/dyn/CoroutineBase.class 2 kB
- java/dyn/CoroutineBase.java 3 kB
- java/dyn/CoroutineDeath.class 0.8 kB
- java/dyn/CoroutineDeath.java 1 kB
- java/lang/Thread$1.class 1 kB
- java/lang/Thread$Caches.class 0.9 kB
- java/lang/Thread$State.class 1 kB
- java/.../Thread$UncaughtExceptionHandler.class 0.3 kB
- java/lang/Thread$WeakClassKey.class 1 kB
- java/lang/Thread.class 16 kB
- java/lang/Thread.java 79 kB
Activity
Lukas's original statements (to me) about the patch, plus the .jar file he provided that has some tweaked classes.
"This is my current version of the coroutine-fibers, please take a look at it.
- I cannot for the life of me make FiberLibrary.Fiber static, which it should be. APT chokes on new Fiber(...) in getCurrentFiber (although it compiles fine).
- I wasn't 100% convinced that using CoroutineLocal for the ThreadContext is the best solution. The context is now kept in the fiber and swapped explcitly, which should make reflective loading much easier. (no incompatible changes to ThreadService)
- letting a fiber that was transferred to reach its end is a very bad thing...
I had to change a few details in the classes that accompany the coro patch (but not in the binaries), the attached jar should be prepended to the classpath (it overwrites java.lang.Thread).
Please ask if you have any questions..."
A recent MLVM build from Stephen Bannasch, with recent coro stuff applied:
http://www.concord.org/~sbannasch/mlvm/java-1.7.0-internal-mlvm-2010_12_22.tar.gz
brew install mlvm
or
curl http://mvlm.net/install.sh | bash
might be helpful for this piece of work?
Very out of scope but hey, you don't ask, you don't get!
As far as I understand the 1.6.5 changeset, coroutines are now being used in jRuby.
It is now possible for coroutine-based fibers to be used, if they are present on the underlying JVM. Normally, though, they're still threaded.
We still do not use coroutines for Enumerator#next, though.
To enable coroutine-based fibers, pass -Xfiber.coroutines=true to JRuby when running atop a coroutine-enabled JVM.
For information about coroutine support in OpenJDK (and for a prebuilt Linux binary) see http://ssw.jku.at/General/Staff/LS/coro/.
Lukas's original blog post showing how fast Fiber could be in JRuby using his coroutine work:
http://classparser.blogspot.com/2010/04/jruby-coroutines-really-fast.html