Kotlin 内部的 delay 函数是如何工作的?

How does the delay function in Kotlin internally work?

我一直在尝试了解 Kotlin 协程的工作原理,并且遇到了 delay 函数。

我对这部作品的理解是,

我的理解对吗? 此外,调用 delay 的线程与调用 delay.

后执行代码的线程之间是否存在关系

谢谢!

是的。你的理解是正确的。 JS 和 Kotlin 的区别在于,用于执行延续的任务队列可以由程序员通过 CoroutineDispatcher 自定义。一般来说,调用delay的线程和continuation被安排恢复的线程是没有关系的。它由两个因素决定:

  • 如果协同程序使用 Unconfined 调度程序,则继续继续的线程是在 delay 的实现中内部使用的某个系统计时器线程。您可以编写自己的 delay 版本,在您选择的线程上恢复 Unconfined 延续。

  • 如果协程使用一些受限的调度程序,那么它将在该调度程序定义的线程或线程池上恢复。开箱即用地提供了许多调度程序。例如,在 Android 中使用 UI 调度程序,协程将始终在 Android UI 线程上恢复。通常,在 Kotlin/JVM 中,您可以采用任何 Executor 并使用 asCoroutineDispatcher 扩展名将其转换为 CoroutineDispatcher