我正在经历共同惯例的概念及其在 kotlin 中的使用和实施。
我用谷歌搜索并阅读了几个答案,就像它在架构和性能方面与线程的不同而言。
这里解释得非常好,
Difference between a "coroutine" and a "thread"?
足够公平,合作例程很棒,没有内存开销,性能卓越,没有死锁,竞争条件等等,并且易于使用。
现在,这里有一些事情,我很困惑,并希望更清晰 -
协同例程很好用,但它如何利用多个内核来提高性能。
答案 0 :(得分:7)
线程和协程几乎是正交的特征。
协同程序是关于编程模型的,而线程是关于执行模型的。
如果要在Android中获取URL或执行重量级计算,则必须使用异步编程。您可以选择以老式方式,回调或协同程序来完成,这会使这些拐杖消失。您只需调用一个可挂起的函数并将结果作为其返回值。
请注意,对于重量级计算,您将使用带或不带协同程序的额外线程。对于网络操作,你不需要额外的线程,有或没有协同程序。
一个很好的比喻是,线程是协调CPU内核到线程的协同程序:
操作系统为线程分配CPU内核,直到线程挂起。稍后,同一个线程可以在另一个核心上恢复。
协程调度程序将一个线程分配给协程,直到协程挂起。后来同一个协程可以在另一个线程上恢复。