延迟功能在Kotlin内部如何工作?

阿比耶特帕瓦尔

我一直在尝试了解Kotlin协程的工作方式,并且遇到了该delay功能。

我对这项工作的理解是,

  • delay挂起当前线程,该线程不同于sleep,不占用CPU周期,可以释放其执行其他任务。
  • 它的工作原理是将延迟函数之后的代码捕获为lambda(Continuation),并且可以在给定时间段后通过另一个线程执行该代码。
  • 该实现似乎类似于Javascript的执行模型,在该模型中,该delay函数使延续存储在某种任务队列中并释放当前线程。经过指定的时间后,将在可用线程上安排此任务。

我的理解正确吗?另外,在调用delay的线程与在调用之后执行代码的线程之间是否存在关系delay

谢谢!

罗曼·伊里扎罗夫(Roman Elizarov)

是。您的理解是正确的。JS和Kotlin之间的区别在于,程序员可以通过定制用于执行继续的任务队列CoroutineDispatcher通常,调用delay的线程与计划继续进行恢复的线程之间没有关系它由两个因素决定:

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何确保所有异步功能在执行延迟之前运行

Golang:节气门(时间延迟)功能在goroutine中不起作用(在主线程中正常工作)

如何获得对延迟功能的引用?

Kotlin协程在内部如何工作?

极限功能在Kotlin

如何延迟执行功能,JavaScript

生成器功能如何在内部工作?

TradingView Pine Script RMA功能在内部如何工作?

功能在Elixir中如何工作?

如何防止我的功能在RemoveDirectory()WINAPI中延迟删除?

如何设置功能延迟?

延迟功能在64位编译器中是否可以在C中工作?

您如何告诉功能在Kotlin中等待几秒钟?

如何在Kotlin中从自身内部访问功能?

如何修复React自定义钩子中的``钩子只能在功能组件内部调用''错误?

如何在AngIf上使用分页功能在Angular上工作?

我不明白销毁功能在这里如何工作?

如何从Kotlin的内部类[AsyncTask]访问扩展功能?

用户定义的S3组通用功能在R中如何工作?

Kotlin内置的“懒惰”功能实际上是如何工作的?

高阶“运行”功能块在Kotlin中如何工作?

在Sitecore中,Glass Mapper Editable功能在遍历对象集合时如何工作?

此评估功能在Connect 4游戏中如何工作?(Java)

laravel工厂助手功能在命名空间方面如何工作?

如何延迟功能的启动

如何在bash中使功能在后台工作/替换文本/ CPU使用率

时钟功能在操作系统中是如何工作的?

如何使 jQuery AutoComplete 功能在 Durandal 中工作?

使剔除功能在 dask 图上工作