为什么以及何时使用协程而不是 Android 中使用 Kotlin 的线程,因为没有并行性?

Why and when to use co-routines instead of threads in Android using Kotlin as there is no parallelism?

我正在研究协程的概念及其在 kotlin 中的用法和实现。

我用谷歌搜索并阅读了一些关于它在体系结构和性能方面与线程有何不同的答案。

这里解释得很好,

Difference between a "coroutine" and a "thread"?

很公平,协程很棒,没有内存开销,性能很好,没有死锁、竞争条件等,而且易于使用。

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

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

协程很好用,但它如何利用多核来提高性能。

线程和协程几乎是正交的特性。

协程是关于您的编程模型,而线程是关于您的执行模型

如果你想获取 URL 或在 Android 中执行重量级计算,你必须使用异步编程。您可以选择以 old-fashioned 方式,使用回调或使用协程,这让那些拐杖消失了。您只需调用一个可挂起的函数并将结果作为其 return 值。

请注意,对于重量级计算,您将使用带或不带协程的额外线程。对于网络操作,您不需要额外的线程,无论是否有协程。

一个很好的类比是线程之于协程就像 CPU 内核之于线程:

OS 将线程分配给 CPU 核心,直到线程挂起。稍后,同一个线程可以在另一个核心上恢复。

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