Kotlin corutines对于有限状态机和一些任务运行器(例如,默认ForkJoinPool)来说是糖。https://github.com/Kotlin/kotlin-coroutines/blob/master/kotlin-coroutines-informal.md#implementation-details
换句话说,java/kotlin运行时中还没有运行时协程(但这可能会随着http://cr.openjdk.java.net/~rpressler/loom/Loom-Proposal.html的变化而改变)。Kotlin协程只是一个接一个地执行的任务的顺序。每个任务都可以在线程池中的任何线程中执行。
Go运行时支持“协程”。但是goroutines并不是真正的协程。Goroutines不允许在程序中设置屈服点。另外,Go不允许设置自定义线程池。您可以仅设置默认池中线程的大小。
kotlin协程和goroutines之间的第一个区别是Go运行时管理此时正在运行的协程。当goroutine在某些IO操作(或同步原语)上被阻塞时,Go选择next Job来执行它。在JVM中,没有这样的智能工作切换。
正因为如此,Go可以廉价地更改当前正在运行的作业。Go只需更改几个注册表https://groups.google.com/forum/#!msg/golang-nuts/j51G7ieoKh4/wxNaKkFEfvcJ。但是有些人说,JVM可以使用线程堆栈而不是寄存器。所以根本不需要保存和加载寄存器。
kotlin协程和goroutines之间的第二个区别是协程的类型。Kotlin协程是无栈协程。Goroutines是堆栈协程。Kotlin协程的所有状态都存储在Kotlin上下文中,而上下文则存储在堆中。Goroutines状态存储在寄存器和线程堆栈中。
我想知道,在IO绑定的任务中,哪些协程(goroutines和kotlin协程)更快?CPU受限的任务?内存消耗情况如何?
发布于 2017-10-22 00:09:08
Kotlin中的协程是以不同于Go中的goroutines的方式实现的,因此哪个“更快”取决于您正在解决的问题和您正在编写的代码的类型。
一般来说,很难提前判断出哪种方法能更好地解决你手头的问题。您必须针对特定的工作负载运行基准测试才能找出答案。然而,这里是关键差异的一般总结,应该会给你一些指导。
与Go goroutines相比,
https://stackoverflow.com/questions/46864623
复制相似问题