协程是什么

122 阅读2分钟
  • 协程是什么

协程是一种编程思想。它并不局限任何语言,不仅Kotlin中有对协程的实现,Python、Go等语言也有。

更实际一点,协程是编译器的能力,因为协程并不需要操作系统和硬件的支持(线程需要),是编译器为了让开发者写代码更简单方便,提供了一些关键字,并在内部自动生成了处理字节码。

协程的代码是运行在线程中的,可以在单线程中执行;也可以在多线程中执行,即支持来回切换。并且协程没有直接和操作系统关联,而是跟线程紧密关联,毕竟是要靠线程去执行。它的设计初衷就是为了解决并发问题,可以更方便地处理多线程协作的任务。

  • 线程和协程的目的差异

线程的目的是提高CPU资源使用率,使多个任务得以并行的运行,是为了服务于机器的。 协程的目的是为了让多个任务之间更好的协作,主要体现在代码逻辑上,是为了服务开发者。

  • 线程和协程的调度差异

线程的调度是系统完成的,一般是抢占式的,根据优先级来分配。

协程的调度是开发者根据程序逻辑指定好的,在不同的时期把资源合理的分配给不同的任务。

  • 协程与线程的关系

协程并不是取代线程,而是抽象于线程之上,线程是被分割的CPU资源,协程是组织好的代码流程,协程需要线程来承载运行,线程是协程的资源。

在Kotlin中,协程就是一个封装好的线程框架。类比于Java中的Executor或Android中的AsyncTask。只要内存足够,一个线程可以运行任意多个线程,但在某一时刻只能有一个协程在运行,多个协程分享该线程分配到的计算机资源。所以,协程就是一套封装好的线程API框架,只不过使用起来非常方便,可以用看起来是同步的代码,去实现异步的操作。