在Kotlin中是否有任何特定的语言实现,它与其他语言实现的Coroutines有什么不同?
在这里,我开始100000余次,这段代码后面发生了什么?
for(i in 0..100000){
async(CommonPool){
//run long running operations
}
}
由于我只在JVM上使用了coroutines,所以我将讨论JVM后端,还有Kotlin Native和Kotlin JavaScript,但这些Kotlin后端不在我的范围内。
所以,让我们从比较Kotlin协同式和其他语言协同式开始。基本上,您应该知道有两种类型的协同式:stackless和Stackful。Kotlin实现了无堆栈的coroutine--这意味着coroutine没有自己的堆栈,这就限制了coroutine的功能。你可以在这里读到一个很好的解释。
示例:
什么叫柯鲁丁就像轻质线?
这意味着Kotlin中的coroutine没有自己的堆栈,它不在本机线程上映射,它不需要在处理器上进行上下文切换。
有什么区别呢?
线程抢占式多任务处理。(通常)。协同多任务处理。
线程-由OS管理(通常)。Coroutine-由用户管理。
Kotlin的coroutines实际上是并行/并发运行的吗?
这取决于,您可以在每个coroutine各自的线程中运行,也可以在一个线程或某个固定线程池中运行所有coroutine。
即使在多核系统中,在任何给定的时间也只有一个coroutine在运行(对吗?)
不,看前面的答案。
在这里,我开始100000余次,这段代码后面发生了什么?
其实要看情况。但假设您编写了以下代码:
fun main(args: Array<String>) {
for (i in 0..100000) {
async(CommonPool) {
delay(1000)
}
}
}
此代码立即执行。
fun main(args: Array<String>) = runBlocking {
for (i in 0..100000) {
val job = async(CommonPool) {
delay(1)
println(i)
}
job.join()
}
}
当您运行此程序时,kotlin将创建continuation
的2*100000个实例,这将占用几十Mb的RAM,在控制台中,您将看到从1到100000的数字。
所以让我们以这样的方式重写这段代码:
fun main(args: Array<String>) = runBlocking {
val job = async(CommonPool) {
for (i in 0..100000) {
delay(1)
println(i)
}
}
job.join()
}
为什么不是: 如有任何帮助,我们将不胜感激。
C#、Lua、 Python 语言都支持 coroutine 特性。coroutine 与 goroutine 在名字上类似,都可以将函数或者语句在独立的环境中运行,但是它们之间有两点不同: goroutine 可能发生并行执行; 但 coroutine 始终顺序执行。 goroutines 意味着并行(或者可以以并行的方式部署),coroutines 一般来说不是这样的,goroutines 通
本文向大家介绍JAVA CountDownLatch与thread-join()的区别解析,包括了JAVA CountDownLatch与thread-join()的区别解析的使用技巧和注意事项,需要的朋友参考一下 今天学习CountDownLatch这个类,作用感觉和join很像,然后就百度了一下,看了他们之间的区别。所以在此记录一下。 首先来看一下join,在当前线程中,如果调用某个threa
Kotlin Coroutines - Use Cases on Android �� Learning Kotlin Coroutines for Android by example. �� Sample implementations for real-world Android use cases. �� Unit tests included! This repository is in
问题内容: 我正在尝试学习科特林。是什么 ,并在科特林相比,Java的? 在Java中: 转换后显示: 问题答案: 和是可以用来声明变量(和属性)的两个关键字。区别在于,using 提供了一个只读变量,与Java中使用关键字相同。 Kotlin中的约定是在任何时候都可以使用,并且只有在知道要在某个地方更改其值时才应该使用a 。 请参阅有关定义局部变量和声明属性的官方文档。 是Java中不存在的可见