gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:40:05 27 4
gpt4 key购买 nike

我正在研究协同例程的概念以及它在 kotlin 中的用法和实现。

我在谷歌上搜索并阅读了一些答案,因为它在架构和性能方面与线程有何不同。

这里解释得很好,

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

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

现在,这里有几件事情,我很困惑,并希望在同一方面更清楚 -

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

协同例程非常好用,但它如何利用多核来提高性能。

最佳答案

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

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

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

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

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

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

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

关于android - 为什么以及何时在使用 Kotlin 的 Android 中使用协程而不是线程,因为没有并行性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49606471/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com