小编Raf*_*oul的帖子

Kotlin协程如何知道何时进行网络呼叫?

我是Kotlin协同程序的新手,有一点我没想到的是,协同程序如何知道在进行网络调用时何时屈服于其他人.

如果我理解正确的话,协同程序会先发制人地工作,这意味着当它执行一些耗时的任务(通常是I/O操作)时,它知道何时屈服于其他协同程序.

例如,假设我们想绘制一些将显示来自远程服务器的数据的UI,并且我们只有一个线程来安排我们的协同程序.我们可以启动一个协程来进行REST API调用以获取数据,同时让另一个协同程序绘制UI的其余部分,它们不依赖于数据.但是,由于我们只有一个线程,因此一次只能运行一个协程.除非用于获取数据的协程在等待数据到达时抢先获取,否则两个协同程序将按顺序执行.

据我所知,Kotlin的协程实现并没有修补任何现有的JVM实现或JDK网络库.因此,如果协程正在调用REST API,它应该像使用Java线程一样阻止.我这样说是因为我在python中看起来有类似的概念,叫做绿色线程.为了使它能够与python的内置网络库一起工作,必须首先对网络库进行"猴子修补".对我而言,这是有道理的,因为只有网络库本身知道何时屈服.

那么,任何人都可以解释Kotlin协程如何知道何时调用阻塞Java网络API?或者如果没有,那么它是否意味着上面例子中提到的任务无法同时执行给出单个线程?

谢谢!

java coroutine kotlin kotlin-coroutines

12
推荐指数
1
解决办法
2435
查看次数

标签 统计

coroutine ×1

java ×1

kotlin ×1

kotlin-coroutines ×1