为什么以及何时使用Kotlin在Android中使用协同例程代替线程,因为没有并行性?

Rit*_*esh 9 android coroutine kotlin kotlin-coroutines

我正在经历共同惯例的概念,以及它在kotlin中的使用和实现.

我用Google搜索并阅读了几个答案,就其在架构和性能方面与线程的不同之处而言.

这里解释得很好,

"coroutine"和"thread"之间的区别?

很公平,合作例程很棒,没有内存开销,性能卓越,没有死锁,竞争条件等等,而且易于使用.

现在,这里有一些事情,我很困惑,并希望更清楚 -

  1. 什么时候应该在Android中使用协同例程和线程?或者我应该坚持只是合作惯例?
  2. 如果,我只是坚持使用协同例程,那么它将如何利用CPU核心,因为它在单个线程上运行.

协同例程很好用,但它如何利用多个内核来提高性能.

Mar*_*nik 9

线程和协同程序几乎是正交的特征.

协同程序是关于您的编程模型,线程是关于您的执行模型.

如果要在Android中获取URL或执行重量级计算,则必须使用异步编程.您可以选择以老式方式,回调或协同程序来实现,这会使这些拐杖消失.您只需调用可挂起的函数并将结果作为其返回值.

请注意,对于重量级计算,您将使用带或不带协同程序的额外线程.对于网络操作,您不需要额外的线程,有或没有协同程序.

一个很好的类比是,线程是协调CPU内核到线程的程序:

操作系统将CPU核心分配给线程,直到线程挂起.稍后同一个线程可以在另一个核心上恢复.

协程调度程序将一个线程分配给协程,直到协程挂起.后来同一个协程可以在另一个线程上恢复.