相关疑难解决方法(0)

Java中可用的协程库

我想用Java做一些事情,如果使用并发例程编写会更清楚,但是对于哪些完全线程严重过度杀伤.当然,答案是使用协同程序,但标准Java库中似乎没有任何协程支持,而快速谷歌在这里或那里会带来诱人的提示,但没有什么实质性的.

这是我到目前为止所发现的:

  • JSIM有一个协程类,但它看起来非常重量级,并且看起来与点上的线程混淆.这样做的目的是降低全面线程的复杂性,而不是添加它.此外,我不确定该类是否可以从库中提取并独立使用.
  • Xalan有一个coroutine set类,可以执行类似coroutine的东西,但是如果可以从整个库中有意义地提取它,那么它仍然是可疑的.它看起来像是一个严格控制的线程池形式,而不是实际的协同程序.
  • 有一个谷歌代码项目看起来像我所追求的,但如果有什么它看起来比使用线程更重量级.我基本上对需要软件在运行时动态更改JVM字节码以完成其工作的事情感到紧张.这看起来有点矫枉过正,并且会像协同程序解决的那样导致更多问题.此外,它似乎没有实现整个协程概念.通过我的一瞥,它提供了一个yield只返回调用者的功能.正确的协同程序允许yields将控制权直接转移到任何已知的协程.基本上这个库,重量级和可怕的,只给你支持迭代器,而不是完全通用的协同程序.
  • 有希望命名的Coroutine for Java失败了,因为它是一个特定于平台(显然使用JNI)的解决方案.

这就是我发现的一切.

我知道Da Vinci机器中对协同程序的本机JVM支持,我也知道这样做的JNI延续技巧.然而,对我来说这些并不是一个很好的解决方案,因为我不一定能控制我的代码运行在哪个VM或平台上.(事实上​​,任何字节码操作系统都会遇到类似的问题 - 如果可能的话,最好是纯Java.运行时字节码操作会限制我在Android上使用它.例如.)

那么有人有任何指针吗?这甚至可能吗?如果没有,是否可以在Java 7中使用?


编辑添加:

只是为了确保混乱载,这是一个相关的问题我的另外一个,但又不尽相同.这个是寻找现有的实施方案,以避免不必要地重新发明轮子.另一个是关于如何在Java中实现协同程序的问题,如果这个问题无法解决的话.目的是在不同的线程上保留不同的问题.


进一步编辑添加:

答案被选中.然而,有些评论是有条理的.库指向的不是一个协程库,所以它在技术上不回答我的问题.尽管如此,它与上面链接的Google Code项目有两个优势:

  1. 两种解决方案都使用字节码操作,但所选的库允许静态字节码操作,这使得它可以在Android和其他不兼容的JVM堆栈中使用.
  2. Google Code项目不会执行完整协同程序.虽然答案的库甚至根本不做协同程序,但它确实做了一些更重要的事情:它为滚动我自己的全功能协程提供了一个很好的基础工具.

java coroutine

42
推荐指数
4
解决办法
1万
查看次数

标签 统计

coroutine ×1

java ×1