kotlin - Kotlin 挂起功能是否在单独的线程上运行?

标签 kotlin coroutine kotlinx.coroutines

挂起功能在单独的线程上运行?
如果不是,那么性能优势是什么?

suspend fun requestToken():Token {..}  // takes 2 sec to complete
suspend fun createPost (token:Token){..} // takes 3 sec to complete

 suspend fun postItem() {
    val token = requestToken()
    val post =createPost(token)
    processPost(post)
  }

所以,当我们到达 processPost(post) 如果挂起函数不在单独的线程上运行,那么我们必须等待 requestToken() createPost( token )方法
完成 (即 2+3= 5 秒) .根据作者的说法,暂停是异步的,但是如果我们没有产生任何新线程,那么我们如何实现异步行为?

最佳答案

suspend is asynchronous


suspend fun s 与其调用者同步执行。你真正想说的是“非阻塞”,这是一个完全不同的故事。

but if we are not spawning any new thread then how are we achieving asynchronous behaviour?



您默认所有 I/O 都必须在某个级别阻塞。这是错误的。非阻塞 I/O 通过将数据推送到发送缓冲区并在接收缓冲区中有数据时接收通知来工作。一个 suspend fun在将数据推送到发送缓冲区并安装回调后,通过挂起自身挂起此机制,该回调将在接收缓冲区中的响应数据准备好时恢复它。

关于kotlin - Kotlin 挂起功能是否在单独的线程上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53552884/

相关文章:

go - 协程和 `goto` 之间的区别?

javascript - 在浏览器中使用协程库客户端?

android - Kotlin 协程和 SecurityException

kotlinx.coroutines - kotlin 协程 - 什么是默认范围?

android - Fuel httpGet() responseString,失败 : com. github.kittinunf.fuel.core.BubbleFuelError: null

android - 我可以在 Material 芯片上创建渐变背景颜色吗?

Kotlin 类层次结构和(协)方差

android - 如何在 Android RecyclerView - GridLayoutManager 中将列设置在行的中心

python - 异步协程