gpt4 book ai didi

kotlin - 为什么这个协程演示崩溃了?

转载 作者:行者123 更新时间:2023-12-02 12:57:28 25 4
gpt4 key购买 nike

import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch

fun main() {
coroutines()
while (true) {
}
}

fun coroutines() {
val jobs = 1..100000
jobs.forEach {
GlobalScope.launch(Dispatchers.IO) {
val request = getRequest()
val client = getClient()
call(request, client)
}
}
}

我在High Sierra的16GB RAM上运行它。

我想了解我在这里做错了什么。
我的意图是创建一个程序来了解我们可以创建多少个协程。

在程序结束之前,我的机器重新启动。

最佳答案

My intention is to create a program to understand how many coroutines we can create.



您编写的程序无法为您提供答案。相反,它在经典Java ExecutorService的顶部放置了一个薄层,最多有64个并发线程执行 call()。您的计算机重新启动的原因完全超出了您在问题中发布的代码范围。这可能与 call()的确切功能有关。

如果要观察Kotlin协程带来的开销,则必须编写不涉及开销比协程高的重量级操作的代码。这是一个例子:
var maxConcurrentCalls = 0

fun main() {
runBlocking {
coroutines()
}
println("You launched %,d concurrent coroutines".format(maxConcurrentCalls))
}

fun CoroutineScope.coroutines() {
var concurrentCalls = 0
val jobs = 1..1_000_000
jobs.forEach {
launch {
concurrentCalls++
maxConcurrentCalls = max(concurrentCalls, maxConcurrentCalls)
delay(1000)
concurrentCalls--
}
}
}

在我的计算机上,它运行了大约3秒钟并打印
You launched 1,000,000 concurrent coroutines

请注意,所有这些协程都在主线程上执行,这就是为什么我不需要线程安全计数器的原因。

关于kotlin - 为什么这个协程演示崩溃了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59063522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com