我正在尝试运行以下代码。
我在控制台中看到大约创建了 8 个工作线程,并且inprintThread之后的方法在不同线程之间并行执行。我无法理解整个操作如何在 1-2 秒内完成。delaydelayNonBlockingSumOfNumbers()
我相信 1 秒的延迟实际上会应用于某个数字。准确地说,8 个活动线程同时运行,因此总延迟时间将为 100000 次迭代/8 个线程 ~ 12500 次迭代/线程或秒。
我的问题是为什么/怎么这么快。还有多个延迟块发生了什么,如果不正确,请澄清我的理解。
我看到协程被认为是轻量级线程,
这是否意味着一个线程可以同时处理多个延迟执行? 为什么我这么说是因为,输出显示同一个线程正在执行中多次使用,如下所示
如果是这样,我如何调试或打印每个运行延迟执行的挂起块的执行过程,就像我们对线程所做的那样。Thread.currentThread().name。
如果我使用 Thread.sleep(1000) 而不是延迟,并打印线程,则输出将显示每次执行之间有 1 秒的差异。同样,我应该如何显示协程执行的类似输出,以便我可以看到正在处理的实际延迟?
fun delayNonBlockingSumOfNumbers(){
printThread("Start of delayNonBlockingSumOfNumbers()")
val deferredList = (1..100000).map {
GlobalScope.async {
//printThread("In Async Before Index $it")
val timetaken:Long = 1000
delay(timetaken)
printThread("In Async After Delay Index $it time is -> $timetaken")
it
}
}
runBlocking {
val sum = deferredList.sumBy { it.await() }
printThread("End of delayNonBlockingSumOfNumbers(), sum …Run Code Online (Sandbox Code Playgroud)