为什么Java使用线程抽象而不是协同例程?

时间:2013-10-22 18:51:20

标签: java multithreading concurrency

在Lua中遇到协同例程的概念后,我觉得这些似乎是编写并发软件的更好的模型,我想知道为什么Java中没有使用它?

协同例程似乎让开发人员编写在多个函数之间跳转的代码,每次执行几个步骤,提供并发执行的错觉,就像CPU在多个线程之间切换时间一样。 Java,但是协同例程允许开发人员决定何时跳出一个函数并开始执行另一个函数。这允许开发人员决定步骤应该有多细粒度,即并发度,以及何时应该发生上下文切换,这可以防止在延迟很关键时进行代价高昂的上下文切换。

1 个答案:

答案 0 :(得分:8)

协同程序功能强大,但不会取代完整的多线程应用程序,因为协同程序在单个线程上运行。因此,在CPU密集型任务需要时,它们不会使用多个内核。我认为它们代表了一种互补的范式而不是竞争范式。功能编程正在Java上取得进展,因为它已经在.Net平台上完成了。协同程序最终会跟随套件。我建议您查看Java路线图以获取更多信息。 有关协程和其他概念的更详细解答,请参阅Processes, threads, green threads, protothreads, fibers, coroutines: what's the difference?。 另请参阅Throughput differences when using coroutines vs threading,其中讨论了使用协程而不是多线程实现生产者消费者问题。