在遇到 Lua 中协程的概念后,我觉得这些似乎是编程并发软件的更好模型,我想知道为什么 Java 中没有使用协程?
协同例程似乎让开发人员编写在多个函数之间跳转的代码,一次执行几个步骤,提供并发执行的错觉,就像 CPU 在 Java 中的多个线程之间进行时间切片一样,但是协同例程允许开发人员决定何时跳出一个函数并开始执行另一个函数。这允许开发人员决定步骤应该有多细,即并发程度,以及何时应该发生上下文切换,这可以在延迟很关键时防止代价高昂的上下文切换。
在遇到 Lua 中协程的概念后,我觉得这些似乎是编程并发软件的更好模型,我想知道为什么 Java 中没有使用协程?
协同例程似乎让开发人员编写在多个函数之间跳转的代码,一次执行几个步骤,提供并发执行的错觉,就像 CPU 在 Java 中的多个线程之间进行时间切片一样,但是协同例程允许开发人员决定何时跳出一个函数并开始执行另一个函数。这允许开发人员决定步骤应该有多细,即并发程度,以及何时应该发生上下文切换,这可以在延迟很关键时防止代价高昂的上下文切换。
协程功能强大,但不会取代成熟的多线程应用程序,因为协程在单线程上运行。因此,当需要 CPU 密集型任务时,它们不会使用多个内核。我认为它们代表了一种互补的范式,而不是一种相互竞争的范式。正如在 .Net 平台上所做的那样,函数式编程正在向 Java 迈进。协程最终将效仿。我建议您查看 Java 路线图以获取更多信息。请参阅进程、线程、绿色线程、原型线程、纤维、协程:有什么区别?以获得涵盖协程和其他概念的更详细的答案。另请参阅使用协程与线程时的吞吐量差异讨论了使用协程而不是多线程来实现生产者消费者问题。