我一直在尝试了解Kotlin协程的工作方式,并且遇到了该delay
功能。
我对这项工作的理解是,
delay
挂起当前线程,该线程不同于sleep
,不占用CPU周期,可以释放其执行其他任务。delay
函数使延续存储在某种任务队列中并释放当前线程。经过指定的时间后,将在可用线程上安排此任务。我的理解正确吗?另外,在调用delay
的线程与在调用之后执行代码的线程之间是否存在关系delay
。
谢谢!
是。您的理解是正确的。JS和Kotlin之间的区别在于,程序员可以通过定制用于执行继续的任务队列CoroutineDispatcher
。通常,调用delay
的线程与计划继续进行恢复的线程之间没有关系。它由两个因素决定:
如果协程使用Unconfined
调度程序,则继续恢复的线程是在delay
实现内部使用的某些系统计时器线程。您可以在自己选择的线程上编写自己的delay
恢复Unconfined
继续版本。
如果协程使用某些受限的调度程序,则它将在该调度程序定义的线程或线程池上恢复。开箱即用地提供了许多调度程序。例如,在Android中,使用UI
调度程序的协程将始终在AndroidUI
线程上恢复。通常,在Kotlin / JVM中,您可以将任何内容Executor
转换为CoroutineDispatcher
使用asCoroutineDispatcher
扩展名。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句