abh*_*war 3 asynchronous coroutine kotlin kotlin-coroutines
我一直在尝试了解 Kotlin 协程是如何工作的,我遇到了这个delay函数。
我对这部作品的理解是,
delay挂起当前线程,与 不同的是sleep,该线程不消耗 CPU 周期并被释放以执行其他任务。delay函数使延续存储在某种任务队列中并释放当前线程。指定时间过后,此任务将安排在可用线程上。我的理解正确吗?此外,调用delay的线程与执行调用delay.
谢谢!
是的。你的理解是对的。JS 和 Kotlin 的区别在于,用于执行延续的任务队列可以由程序员通过CoroutineDispatcher. 一般情况下,调用delay的线程与调度继续执行的线程之间没有关系。它由两个因素决定:
如果协程使用Unconfined调度程序,那么继续恢复的线程是在delay实现中内部使用的某个系统计时器线程。您可以编写自己的版本,在您选择的线程上delay继续Unconfined延续。
如果协程使用某个受限的调度程序,则它会在该调度程序定义的线程或线程池上恢复。提供了许多开箱即用的调度员。例如,在 Android 中使用UI调度程序协程将始终在 AndroidUI线程上恢复。通常,在 Kotlin/JVM 中,您可以使用任何扩展名Executor并将其转换为CoroutineDispatcher使用asCoroutineDispatcher扩展名。
| 归档时间: |
|
| 查看次数: |
667 次 |
| 最近记录: |