Tag:

协程(goroutines和kotlin协程)哪个更快?

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运行时管理此时正在运行的协程。 当某个IO操作(或同步原语)阻塞了goroutine时,选择下一个Job来执行它。 在JVM中,这种条件下没有智能的工作转换。 因此,Go可以便宜地更改当前正在运行的工作。 Go只需要更改一些registryhttps://groups.google.com/forum/#!msg/golang-nuts/j51G7ieoKh4/wxNaKkFEfvcJ 。 但有人说,JVM可以使用堆栈线程而不是使用寄存器。 所以根本没有保存和加载寄存器。 kotlin协程和goroutines之间的第二个区别是协程types。 Kotlin协程是无堆栈协程。 Goroutines是堆栈协程。 Kotlin协程的所有状态都存储在Kotlin上下文中,并存储在堆中。 Goroutines状态存储在寄存器和线程堆栈中。 我想知道哪些协程(goroutines和kotlin协程)在IO绑定任务中更快? CPU绑定任务? 内存消耗如何?