挂起功能在单独的线程上运行?
如果不是,那么性能优势是什么?
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/