这个问题和我在 Java 中现有的协同程序实现上的问题有关。如果正如我怀疑的那样,事实证明 Java 中目前还没有完整的协程实现,那么实现它们需要什么呢?
正如我在那个问题中所说,我知道以下几点:
我将依次解决每个人的不足之处。
这种“解决方案”是病态的。协同程序的重点是 避免的线程、锁定、内核调度等开销。协同程序应该是轻巧快速的,并且只能在用户空间中执行。通过严格限制的全倾斜线程来实现它们可以摆脱所有的优势。
这个解决方案更实际,尽管有点难以实现。这大致相当于跳转到 C 语言的协同程序库的汇编语言(这就是它们中的许多工作原理) ,其优点是您只需要担心一个架构,并且正确处理这个问题。
它还使您只能在完全兼容的 JVM 堆栈上运行代码(这意味着,例如,没有 Android) ,除非您能够找到在不兼容的堆栈上执行相同操作的方法。但是,如果您确实找到了这样做的方法,那么现在您的系统复杂性和测试需求已经增加了一倍。
达芬奇机器是很酷的实验,但因为它不是一个标准的 JVM,它的功能将不会在任何地方可用。实际上,我怀疑大多数生产环境都会明确禁止使用达芬奇机器。因此,我可以用它来做一些很酷的实验,但不能用于任何我期望发布到现实世界的代码。
这也带来了与上面的 JVM 字节码操作解决方案类似的附加问题: 不能在替代堆栈(如 Android)上工作。
这个解决方案使得在 Java 中这样做毫无意义。CPU 和操作系统的每一个组合都需要独立的测试,每一个都是潜在的令人沮丧的细微故障点。当然,我也可以把自己完全绑定在一个平台上,但这也使得用 Java 做事毫无意义。
那么..。
有没有办法在 Java 中实现协程而不使用这四种技术中的任何一种?或者我将被迫使用这四种方法中气味最小的一种(JVM 操作)来代替?
编辑补充:
只是为了确保包含混淆,这是一个 相关的问题到 另一个,但不一样。该公司正在寻求实施 存在,以避免不必要的重造轮子。这个问题涉及到,如果另一个问题无法回答,那么如何在 Java 中实现协程。目的是在不同的线程上保持不同的问题。