kotlin - Kotlin/Native:如何异步执行阻塞调用?
问题描述
截至目前,Kotlin/Native 是单线程的。因此,以下代码将被阻止sleep
:
coroutineScope {
launch { plaform.posix._sleep(100000) }
launch { println("Hello") }
}
但是,它有一种新颖的并发机制,称为Workers。然而,即使使用 worker,主线程也会被长时间运行的 posix 调用阻塞:
coroutineScope {
launch { Worker.start().execute(TransferMode.SAFE, { }, { plaform.posix._sleep(100000) }).consume{ } }
launch { println("Hello") }
}
上面的两个片段都不会 print Hello
。
异步执行一系列昂贵的阻塞调用的正确方法是什么?
解决方案
K/N 有一个多线程版本的 kotlin 协程,它目前位于一个单独的分支上:native-mt。
您可以使用Dispatchers.Default将任务卸载到后台线程
推荐阅读
- python - 如何提取、修改和恢复正确修改的边界框
- python - 添加注释文本会产生整数错误消息
- javascript - 在 React.js 中导入图像时遇到问题
- python - 使用 autoclass_content='both' 时排除某些类的 __init__ 文档字符串
- apache-camel - 使用特征暴露 UDP 端口并使其在 pod 外部可访问
- html - 动画幻灯片菜单时,Div 内容消失
- javascript - 一次更新多个 javascript 对象属性
- android - 如何让用户在 Android 和 iOS 上选择文件夹
- sql - 我们如何在 Netezza SQL 中转置数据?
- javascript - 捕获 select2 输入的 keydown 事件